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')
Respuestas:
Esto me sucedió a mí también, y las respuestas dadas aquí ya no eran satisfactorias, así que hice mi propia investigación.
Antecedentes: restricciones de acceso de 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 sea parte de la API pública. Y Eclipse generalmente tiene razón sobre qué es y qué no es parte de la API pública.
Problema
Ahora, puede haber situaciones en las que desee utilizar una API no pública, como
sun.misc
(no debería, a menos que sepa lo que está haciendo). Y puede haber situaciones en las que Eclipse no es realmente correcto (eso es lo que me sucedió, solo quería usarjavax.smartcardio
). En ese caso, obtenemos este error en Eclipse.Solución
La solución es cambiar las restricciones de acceso.
javax/smartcardio/**
", para ti podría ser "com/apple/eawt/**
".fuente
Estaba teniendo el mismo problema. Cuando creé inicialmente el proyecto Java en Eclipse, especifiqué JRE 8. Cuando entré 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) me solucionó el error.
fuente
Agregando permiso accesible javafx en eclipse oxygen vaya a proyecto> propiedades> ruta de compilación java> bibliotecas> luego expanda las bibliotecas y haga doble clic en> Reglas de acceso allí configura el permiso Resolución: Patrón de regla accesible: javafx / **
fuente
Para comenzar ( y no relacionado ), crear una instancia de la
Application
clase por sí mismo no parece ser su uso previsto. De lo que se puede leer de su fuente , se espera que utilice la instancia estática devuelta porgetApplication()
.Ahora vamos al error Eclipse informa. Me he encontrado 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 en el que estaba la superclase a los paquetes importados por mi complemento.Sin embargo, hay muchas causas diferentes para los errores basados en la "restricción en el proyecto / biblioteca requerida ". Similar al problema descrito anteriormente, el tipo que está utilizando puede tener dependencias de paquetes que la biblioteca no exporta o que no se exportan en sí. En ese caso, puede intentar localizar los paquetes que faltan y exportarlos usted mismo, como se sugiere aquí , o probar las Reglas de acceso. Otros escenarios posibles incluyen:
Esto terminó más como una mezcla de problemas relacionados con la restricción que como una respuesta real. Pero dado que la restricción en los proyectos requeridos es un error tan versátil que se debe informar, la receta perfecta probablemente aún no se haya encontrado.
fuente
Tuve este problema porque la faceta del proyecto asociada con mi proyecto era la versión incorrecta de Java.
Para solucionar esto, hice lo siguiente:
Esto reconstruirá su proyecto y esperamos que el error se resuelva.
fuente
Tuvimos que cambiar nuestra aplicación para construir contra el JDK 1.8 usando Window-> Preferences-> Java-> Instalated JREs . 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 con el botón derecho en "Biblioteca del sistema JRE [wrong-jre-here]" y cambie de Entorno de ejecución: a "Espacio de trabajo predeterminado (yer-default-here)"
fuente
Funcionó: Propiedades del proyecto -> ProjectFacets -> Runtimes -> jdk1.8.0_45 -> Apply
fuente
En la barra de menú superior de Eclipse:
fuente
Si tiene este mismo problema con Spring Tool Suite:
El IDE subyacente de Spring Tool Suite es, de hecho, Eclipse. Recibí este error justo ahora tratando de usar algunas
com.sun.net
clases. Para eliminar estos errores y evitar que aparezcan en la plataforma Eclipse Luna SR1 (4.4.2) de STS:Eres bueno para ir.
fuente
Tuve el mismo problema Así es como lo resolví: vaya al Explorador de paquetes. Haga clic derecho en JRE System Library y vaya a Propiedades. En el Classpath Container> Seleccionar JRE para la ruta de compilación del proyecto, seleccione la tercera opción (JRE predeterminado del espacio de trabajo).
Fuente: https://thenewboston.com/forum/topic.php?id=3917
fuente
Vaya a la siguiente configuración:
Ventana -> Preferencias -> Java-Compiler-Errores / Advertencias-Referencia obsoleta y restringida API-Prohibida (reglas de acceso)
Póngalo en
Warning
oIgnore
.fuente
Utilizamos IBM Rational Application Developer (RAD) y tuvimos el mismo problema.
Mensaje de error:
Restricción de acceso: el tipo 'JAXWSProperties' no es API (restricción en la biblioteca requerida 'C: \ IBM \ RAD95 \ jdk \ jre \ lib \ rt.jar')
Solución:
vaya a la ruta de compilación de Java y en la pestaña Biblioteca, elimine la Biblioteca del sistema JRE. Luego, nuevamente Agregar biblioteca -> Biblioteca del sistema JRE
fuente
En Eclipse Mars.2 Release (4.5.2):
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
seleccione JRE ... y presione Editar: Cambiar a Workspace JRE (jdk1.8.0_77)
Funciona para mi.
fuente
Tengo eclipse JRE 8.112, no estoy seguro si eso importa, pero lo que hice fue esto:
Esto resolvió mi problema.
fuente
Simplemente agrego e (fx) clipse en eclipse marketplace. Fácil y simple
fuente
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 la declaración 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.
fuente
Tuve un pequeño problema diferente. En Project - Properties - Libraries - JRE library, tenía la versión incorrecta de JRE lib. Elimine y configure el real, y listo, todas las
Access restriction...
advertencias están ausentes.fuente
Incluso si es una pregunta anterior, para mí en Eclipse, simplemente hago clic derecho en la carpeta y las propiedades de Src (Alt + Enter) y la verificación para
Ignore optional compile problems
eliminar el error.fuente
Si alguien tiene este problema solo en su herramienta de CI mientras ejecuta maven, lo que me sirvió fue definir explícitamente el entorno de ejecución en su
MANIFEST.MF
.En mi caso, hice esto insertando la siguiente línea en mi archivo de manifiesto del paquete OSGi:
fuente