java - portable - Restricción de acceso: el tipo ''Aplicación'' no es API(restricción en la biblioteca requerida rt.jar)
eclipse standard (15)
Al agregar permisos accesibles para javafx en eclipse oxygen, vaya a project> properties> ruta de compilación java> libraries> luego expanda las bibliotecas y haga doble clic en> Reglas de acceso allí donde establece el permiso Resolución: patrón de reglas accesible: javafx / **
Aquí está el código:
package mscontroller;
import javax.swing.*;
import com.apple.eawt.Application;
public class Main {
public static void main(String[] args)
{
Application app = new Application();
app.setEnabledAboutMenu(true);
AMEListener listener = new AMEListener();
app.addApplicationListener(listener);
JFrame mainFrame = new JFrame("Application Menu Example");
mainFrame.setSize(500, 500);
mainFrame.setVisible(true);
}
}
aquí está el error:
Exception in thread "main" java.lang.Error: Unresolved compilation
problems: Access restriction: The type ''Application'' is not API
(restriction on required library
''/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar'')
Access restriction: The constructor ''Application()'' is not API
(restriction on required library
''/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar'')
Access restriction: The type ''Application'' is not API (restriction on
required library
''/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar'')
Access restriction: The method
''Application.setEnabledAboutMenu(boolean)'' is not API (restriction on
required library
''/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar'')
AMEListener cannot be resolved to a type AMEListener cannot be
resolved to a type
at mscontroller.Main.main(Main.java:9)
eclipse dice esto:
Restricción de acceso: el tipo ''Aplicación'' no es API (restricción en la biblioteca requerida ''/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar'')
En la barra de menú superior de Eclipse:
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning
En la versión de Eclipse Mars.2 (4.5.2):
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
seleccione JRE ... y presione Editar: Cambie a Workspace JRE (jdk1.8.0_77)
Funciona para mi.
Estaba teniendo el mismo problema. Cuando creé inicialmente el proyecto Java en Eclipse, especifiqué JRE 8. Cuando ingresé en la ruta de compilación del proyecto y edité la Biblioteca del Sistema JRE, se seleccionó el entorno de ejecución de Java 8. Cuando elegí usar un "Alernate JRE" (todavía Java 8), solucionó el error por mí.
Esto también me pasó a mí, y las respuestas dadas aquí ya no me satisfacían, así que hice mi propia investigación.
Antecedentes: restricciones de acceso a Eclipse
Eclipse tiene un mecanismo llamado restricciones de acceso para evitar el uso accidental de clases que Eclipse cree que no son parte de la API pública. Por lo general, Eclipse tiene razón al respecto, en ambos sentidos: por lo general, no queremos usar algo que no forme parte de la API pública. Y Eclipse suele tener razón acerca de lo que es y lo que no es parte de la API pública.
Problema
Ahora bien, puede haber situaciones en las que desee utilizar Non-API público, como sun.misc
(no debe hacerlo, a menos que sepa lo que está haciendo). Y puede haber situaciones en las que Eclipse no está realmente en lo cierto (eso es lo que me sucedió, solo quería usar javax.smartcardio
). En ese caso, obtenemos este error en Eclipse.
Solución
La solución es cambiar las restricciones de acceso.
- Vaya a las propiedades de su proyecto Java,
- es decir, seleccionando "Propiedades" del menú contextual del proyecto en el "Explorador de paquetes".
- Vaya a "Ruta de compilación de Java", pestaña "Bibliotecas".
- Expande la entrada de la biblioteca
- seleccionar
- "Reglas de acceso",
- "Editar ..." y
- "Agregar ..." una "Resolución: Accesible" con un patrón de regla correspondiente. Para mí fue "
javax/smartcardio/**
", para ti podría ser "com/apple/eawt/**
".
Estoy usando eclipse neon 3. Solo quería usar javafx.application.Application, así que seguí la respuesta de Christian Hujer anterior y funcionó. Solo algunos consejos: las reglas de acceso son muy similares a las de importación. Para mí, las reglas de acceso que agregué fueron "javafx / application / **". Simplemente reemplace el punto en la declaración de importación con barra diagonal y esa es la regla. Espero que ayude.
Funcionó: Project Properties -> ProjectFacets -> Runtimes -> jdk1.8.0_45 -> Apply
He eclipsado JRE 8.112, no estoy seguro si eso importa, pero lo que hice fue esto:
- Haz clic derecho en mi carpeta de proyectos
- bajó a las propiedades y hizo clic
- hizo clic en la carpeta de la ruta de compilación java
- una vez dentro, estaba en el orden y la exportación
- Revisé la Biblioteca del Sistema JRE [jre1.8.0_112]
- luego lo movió arriba de la otra biblioteca del sistema JRE allí (no estoy seguro si esto importaba)
- luego presionado ok
Esto resolvió mi problema.
Ir a la siguiente configuración:
Ventana -> Preferencias -> Java-Compiler-Errors / Warnings-Referencia prohibida y obsoleta API-prohibida (reglas de acceso)
Establézcalo en Warning
o Ignore
.
Para empezar ( y no relacionado ), crear una instancia de la clase de Application
por su cuenta no parece ser su uso previsto. Por lo que se puede leer de su source , se espera que use la instancia estática devuelta por getApplication()
.
Ahora veamos el error de los informes de Eclipse. Me encontré con un problema similar recientemente: Access restriction: The method ... is not API (restriction on required project)
. Llamé al método en cuestión como un método de un objeto que heredó ese método de una superclase. Todo lo que tenía que hacer era agregar el paquete que la súper clase tenía a los paquetes importados por mi complemento.
Sin embargo, hay muchas causas diferentes para errores basados en "restricción en proyecto / biblioteca requerida ". Similar al problema descrito anteriormente, el tipo que está utilizando podría tener dependencias a paquetes que la biblioteca no exporta o que podrían no exportarse. En ese caso, puede intentar rastrear los paquetes que faltan y exportarlos usted mismo, como se sugiere here , o probar las Reglas de acceso. Otros posibles escenarios incluyen:
- Eclipse quiere evitar que use paquetes disponibles que no son parte de la API pública de Java (solución 1 , 2 )
- Las dependencias son satisfechas por múltiples fuentes, las versiones son conflictivas, etc. (solución 1 , 2 , 3 )
- Eclipse está utilizando un JRE donde es necesario un JDK (que podría ser el caso aquí, a partir de lo que dicen sus errores; solution ) o la versión de JRE / JDK en la ruta de compilación del proyecto no es la correcta
Esto terminó siendo más una mezcla de problemas relacionados con la restricción que una respuesta real. Pero dado que la restricción en los proyectos requeridos es un error tan versátil que debe informarse, es probable que aún se encuentre la receta perfecta.
Simplemente agrego e (fx) clipse en el mercado de eclipse. Fácil y simple
Tenía el mismo problema. Así es como lo resolví: vaya a Package Explorer. Haga clic derecho en JRE System Library y vaya a Propiedades. En Classpath Container> Select JRE para la ruta de compilación del proyecto, seleccione la tercera opción (JRE de espacio de trabajo predeterminado).
Tuve este problema porque la faceta del proyecto asociada a mi proyecto era la versión de Java incorrecta.
Para solucionar esto, hice lo siguiente:
- Haga clic derecho en el proyecto y seleccione Propiedades
- Seleccione ''Project Facets'' y cambie la versión de Java a algo mayor que 1.4.
- Haga clic en [Aplicar]
Esto reconstruirá tu proyecto y es de esperar que el error se resuelva.
Tuvimos que cambiar nuestra aplicación para compilar contra JDK 1.8 usando Window-> Preferences-> Java-> JRE instaladas . Sin embargo, después de cambiar eso, la biblioteca del sistema JRE especificada en el Explorador de proyectos seguía siendo incorrecta. Para solucionar esto, haga clic derecho en "JRE System Library [wrong-jre-here]" y cambie del entorno de ejecución: a "Espacio de trabajo predeterminado (yer-default-here)"
Si tiene este problema con Spring Tool Suite:
El IDE subyacente de Spring Tool Suite es, de hecho, Eclipse. He recibido este error al tratar de usar algunas clases de com.sun.net
. Para eliminar estos errores y evitar que aparezcan en la plataforma Eclipse Luna SR1 (4.4.2) de STS:
- Navega a Proyecto> Propiedades
- Expandir el encabezado del compilador de Java
- Haga clic en Errores / Advertencias
- Expandir API obsoleta y restringida
- Al lado de "Referencia prohibida (reglas de acceso)", seleccione "ignorar"
- Al lado de "Referencia desalentada (reglas de acceso)", seleccione "ignorar"
Eres bueno para ir.