Restricción de acceso: el tipo ‘Aplicación’ no es API (restricción en la biblioteca requerida rt.jar)

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 comstacktion 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’)

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 comstackció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/** “.

Estaba teniendo el mismo problema. Cuando creé inicialmente el proyecto Java en Eclipse, especifiqué JRE 8. Cuando ingresé en la ruta de comstackció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í.

Al agregar permisos accesibles para javafx en eclipse oxygen, vaya a project> properties> ruta de comstackció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 / **

enter image description here

enter image description here

enter image description here

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 fuente , 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 aquí , 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 fonts, 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; solución ) o la versión de JRE / JDK en la ruta de comstackció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.

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:

  1. Haga clic derecho en el proyecto y seleccione Propiedades
  2. Seleccione ‘Project Facets’ y cambie la versión de Java a algo mayor que 1.4.
  3. Haga clic en [Aplicar]

Esto reconstruirá tu proyecto y es de esperar que el error se resuelva.

Funcionó: Project Properties -> ProjectFacets -> Runtimes -> jdk1.8.0_45 -> Apply

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 comstackdor 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.

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 

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 comstackción del proyecto, seleccione la tercera opción (JRE de espacio de trabajo predeterminado).

Fuente: https://thenewboston.com/forum/topic.php?id=3917

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 .

Tuvimos que cambiar nuestra aplicación para comstackr 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)”

enter image description here

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.

He eclipsado JRE 8.112, no estoy seguro si eso importa, pero lo que hice fue esto:

  1. Haz clic derecho en mi carpeta de proyectos
  2. bajó a las propiedades y hizo clic
  3. hizo clic en la carpeta de la ruta de comstackción java
  4. una vez dentro, estaba en el orden y la exportación
  5. Revisé la Biblioteca del Sistema JRE [jre1.8.0_112]
  6. luego lo movió arriba de la otra biblioteca del sistema JRE allí (no estoy seguro si esto importaba)
  7. luego presionado ok

Esto resolvió mi problema.

Simplemente agrego e (fx) clipse en el mercado de eclipse. Fácil y simple

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 statement de importación con barra diagonal y esa es la regla. Espero que ayude.