Voici le code:
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);
}
}
voici l'erreur:
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 dit ceci:
Restriction d'accès: le type 'Application' n'est pas une API (restriction sur la bibliothèque requise '/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
Cela m'est aussi arrivé et les réponses données ici n'étaient déjà pas satisfaisantes, alors j'ai fait mes propres recherches.
Eclipse dispose d'un mécanisme appelé restrictions d'accès pour vous empêcher d'utiliser accidentellement des classes qui, selon Eclipse, ne font pas partie de l'API publique. En règle générale, Eclipse a raison à ce sujet, dans les deux sens: nous ne souhaitons généralement pas utiliser quelque chose qui ne fait pas partie de l'API publique. Et Eclipse a généralement raison en ce qui concerne l’API publique et ce qu’elle ne fait pas.
Maintenant, il peut arriver que vous utilisiez une non-API publique, telle que Sun.misc
(vous ne devriez pas, sauf si vous savez ce que vous faites). Et il peut y avoir des situations où Eclipse n'a pas vraiment raison (c'est ce qui m'est arrivé, je voulais simplement utiliser javax.smartcardio
). Dans ce cas, nous obtenons cette erreur dans Eclipse.
La solution consiste à modifier les restrictions d'accès.
javax/smartcardio/**
", mais pour vous, ce pourrait être "com/Apple/eawt/**
".J'avais le même problème. Lorsque j'ai initialement créé le projet Java dans Eclipse, j'avais spécifié JRE 8. Lorsque je suis entré dans le chemin de génération du projet et que j'ai modifié la bibliothèque système JRE, l'environnement d'exécution Java 8 a été sélectionné. Lorsque j'ai choisi d'utiliser un "Alernate JRE" (toujours Java 8), l'erreur a été corrigée pour moi.
Pour commencer (et sans relation), l'instanciation de la classe Application
par vous-même ne semble pas être son utilisation prévue. D'après ce que vous pouvez lire à partir de source , vous devez plutôt utiliser l'instance statique renvoyée par getApplication()
.
Passons maintenant aux rapports d’erreur Eclipse. J'ai récemment rencontré un problème similaire: Access restriction: The method ... is not API (restriction on required project)
. J'ai appelé la méthode en question en tant que méthode d'un objet qui a hérité de cette méthode d'une super classe. Tout ce que j'avais à faire, c'était d'ajouter le paquet dans lequel se trouvait la super classe aux paquets importés par mon plugin.
Cependant, il existe de nombreuses causes différentes d'erreurs basées sur "restriction sur le projet/bibliothèque requis". Semblable au problème décrit ci-dessus, le type que vous utilisez peut avoir des dépendances par rapport aux packages qui ne sont pas exportés par la bibliothèque ou ne peuvent pas être exportés lui-même. Dans ce cas, vous pouvez essayer de localiser les paquets manquants et de les exporter vous-même, comme suggéré ici , ou essayez les règles d'accès. D'autres scénarios possibles incluent:
Cela a fini par ressembler davantage à un mélange de problèmes liés aux restrictions qu’une réponse réelle. Cependant, étant donné que la restriction des projets requis est une erreur si polyvalente à signaler, la recette parfaite doit encore être trouvée.
J'ai eu ce problème parce que la facette de projet associée à mon projet était la mauvaise version de Java.
Pour résoudre ce problème, j’ai fait ce qui suit:
Cela reconstruira votre projet et si tout va bien l'erreur sera résolue.
Cela a fonctionné: Propriétés du projet -> ProjectFacets -> Runtimes -> jdk1.8.0_45 -> Appliquer
Dans la barre de menus supérieure d'Eclipse:
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning
Si vous rencontrez le même problème avec Spring Tool Suite:
IDE sous-jacent à Spring Tool Suite est en fait Eclipse. J'ai eu cette erreur tout à l'heure en essayant d'utiliser certaines classes com.Sun.net
. Pour supprimer ces erreurs et les empêcher de s'afficher dans la plate-forme Eclipse Luna SR1 (4.4.2) de STS:
Vous êtes prêt à partir.
Avait le même problème. Voici comment j'ai résolu le problème: Accédez à Package Explorer. Cliquez avec le bouton droit sur JRE System Library et accédez à Propriétés. Dans le conteneur Classpath> Sélectionner JRE pour le chemin de génération du projet, sélectionnez la troisième option (JRE par défaut de Workspace).
Accédez au paramètre suivant:
Fenêtre -> Préférences -> Java-Compiler-Errors/Warnings-Référence obsolète et restreinte API (règles d'accès)
Réglez-le sur Warning
ou Ignore
.
Nous avons dû modifier notre application pour la construire par rapport au JDK 1.8 en utilisant Window-> Préférences-> Java-> JRE installés. Cependant, après avoir changé cela, la bibliothèque système JRE spécifiée dans l'explorateur de projets était toujours incorrecte. Pour résoudre ce problème, cliquez avec le bouton droit de la souris sur "Bibliothèque système JRE [bad-jre-here]" et remplacez l'environnement d'exécution par "Espace de travail par défaut (yer-default-here)".
Dans Eclipse Mars.2 Release (4.5.2):Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
sélectionnez JRE ... et appuyez sur Modifier: Basculer vers l'espace de travail JRE (jdk1.8.0_77)
Travaille pour moi.
J'ai Eclipse JRE 8.112, je ne sais pas si ça compte mais ce que j'ai fait était le suivant:
Cela a résolu mon problème.
Je viens simplement d'ajouter e (fx) clipse sur le marché Eclipse. Facile et simple
J'ai eu un petit problème différent. Dans la bibliothèque Projet - Propriétés - Bibliothèques - JRE, j'avais la mauvaise version de JRE lib. Supprimer et définir le réel, et le tour est joué - tous les avertissements Access restriction...
sont absents.
Nous utilisons IBM Rational Application Developer (RAD) et avons le même problème.
Message d'erreur:
Restriction d'accès: le type 'JAXWSProperties' n'est pas une API (restriction sur la bibliothèque 'C:\IBM\RAD95\jdk\jre\lib\rt.jar' requise
Solution:
allez dans le chemin de génération Java et sous l'onglet Bibliothèque, supprimez JRE System Library. Puis à nouveau Ajouter une bibliothèque -> Bibliothèque système JRE
J'utilise Eclipse neon 3. Je voulais juste utiliser javafx.application.Application, j'ai donc suivi la réponse de Christian Hujer ci-dessus et cela a fonctionné. Quelques astuces: les règles d'accès sont très similaires à la déclaration d'importation. Pour moi, les règles d'accès que j'ai ajoutées étaient "javafx/application/**". Il suffit de remplacer le point dans la déclaration d'importation par une barre oblique et c'est la règle. J'espère que cela pourra aider.