Hier ist der 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);
}
}
hier ist der fehler:
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 sagt das:
Zugriffsbeschränkung: Der Typ 'Application' ist keine API (Einschränkung der erforderlichen Bibliothek '/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar').
Das passierte auch mir, und die Antworten, die hier bereits gegeben wurden, waren nicht zufriedenstellend. Deshalb habe ich meine eigenen Nachforschungen angestellt.
Eclipse verfügt über einen Mechanismus, der als Zugriffsbeschränkungen bezeichnet wird, um zu verhindern, dass Sie versehentlich Klassen verwenden, die nach Ansicht von Eclipse nicht Teil der öffentlichen API sind. In der Regel hat Eclipse in beiden Richtungen recht: Wir wollen normalerweise nichts verwenden, was nicht Teil der öffentlichen API ist. Und Eclipse hat in der Regel Recht, was ist und was nicht Teil der öffentlichen API ist.
Nun kann es Situationen geben, in denen Sie eine öffentliche Nicht-API verwenden möchten, wie Sun.misc
(dies sollte nicht der Fall sein, es sei denn, Sie wissen, was Sie tun). Und es kann Situationen geben, in denen Eclipse nicht wirklich richtig ist (genau das ist mir passiert, ich wollte nur javax.smartcardio
verwenden). In diesem Fall erhalten wir diesen Fehler in Eclipse.
Die Lösung besteht darin, die Zugriffsbeschränkungen zu ändern.
javax/smartcardio/**
", für Sie könnte es "com/Apple/eawt/**
" sein.Ich hatte das gleiche Problem. Als ich das Java-Projekt ursprünglich in Eclipse erstellt hatte, gab ich JRE 8 an. Als ich in den Erstellungspfad des Projekts ging und die JRE-Systembibliothek bearbeitet hatte, wurde die Java 8-Ausführungsumgebung ausgewählt. Als ich mich für "Alernate JRE" (noch Java 8) entschieden habe, wurde der Fehler für mich behoben.
Zunächst ( und nicht verwandte ), scheint die Instanziierung der Application
-Klasse selbst nicht die beabsichtigte Verwendung zu sein. Von dem, was man aus source lesen kann, wird eher erwartet, dass Sie die statische Instanz verwenden, die von getApplication()
zurückgegeben wird.
Kommen wir nun zu den Eclipse-Fehlerberichten. Ich bin kürzlich auf ein ähnliches Problem gestoßen: Access restriction: The method ... is not API (restriction on required project)
. Ich habe die fragliche Methode als Methode eines Objekts bezeichnet, das diese Methode von einer Superklasse geerbt hat. Ich musste lediglich das Paket, in dem sich die Superklasse befand, zu den Paketen hinzufügen, die von meinem Plugin importiert wurden.
Es gibt jedoch viele verschiedene Ursachen für Fehler, die auf "Einschränkung des erforderlichen Projekts/der Bibliothek " beruhen. Ähnlich wie bei dem oben beschriebenen Problem kann der verwendete Typ von Paketen abhängig sein, die nicht von der Bibliothek exportiert werden oder möglicherweise nicht selbst exportiert werden. In diesem Fall können Sie versuchen, die fehlenden Pakete aufzuspüren und sie selbst zu exportieren, wie vorgeschlagen hier , oder versuchen Sie es mit den Zugriffsregeln. Andere mögliche Szenarien sind:
Dies endete eher als ein Gemisch von Restriktionsproblemen als als eine tatsächliche Antwort. Da aber Beschränkung auf benötigte Projekte ein so vielseitiger Fehler zu melden ist, dürfte das perfekte Rezept noch zu finden sein.
Ich hatte dieses Problem, weil die mit meinem Projekt verknüpfte Projektfacette die falsche Java-Version war.
Um dies zu beheben, habe ich Folgendes getan:
Dadurch wird Ihr Projekt neu erstellt und der Fehler wird hoffentlich behoben.
Es hat funktioniert: Projekteigenschaften -> ProjektFacets -> Laufzeiten -> jdk1.8.0_45 -> Übernehmen
In der oberen Menüleiste von Eclipse:
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning
Wenn Sie das gleiche Problem mit Spring Tool Suite haben:
Die zugrunde liegende Spring Tool Suite IDE ist in der Tat Eclipse. Ich habe diesen Fehler erhalten, als ich gerade versucht habe, einige com.Sun.net
-Klassen zu verwenden. So beheben Sie diese Fehler und verhindern, dass sie in der Eclipse Luna SR1 (4.4.2) -Plattform von STS auftauchen:
Du bist gut zu gehen.
Hatte das gleiche Problem. So habe ich es gelöst: Gehen Sie zum Package Explorer. Klicken Sie mit der rechten Maustaste auf JRE System Library und gehen Sie zu Eigenschaften. Wählen Sie im Classpath Container> JRE für den Projekterstellungspfad auswählen die dritte Option (Standard-JRE für Workspace).
Gehen Sie zu der folgenden Einstellung:
Fenster -> Einstellungen -> Java-Compiler-Fehler/Warnungen - Veraltete und eingeschränkte API-Verbotene Referenz (Zugriffsregeln)
Setzen Sie es auf Warning
oder Ignore
.
Wir mussten unsere Anwendung ändern, um das JDK 1.8 mithilfe von Window-> Preferences-> Java-> Installed JREs zu erstellen. Nach der Änderung war die im Projekt-Explorer angegebene JRE-Systembibliothek jedoch immer noch fehlerhaft. Um dies zu beheben, klicken Sie mit der rechten Maustaste auf "JRE-Systembibliothek [falsch-jre-hier]" und wechseln Sie von der Ausführungsumgebung in "Workspace Default (yer-default-here)"
In Eclipse Mars.2 Release (4.5.2):Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
Wählen Sie JRE ... aus und drücken Sie Bearbeiten: Zu Arbeitsbereich JRE wechseln (jdk1.8.0_77)
Funktioniert bei mir.
Ich habe Eclipse JRE 8.112, nicht sicher, ob das wichtig ist, aber was ich getan habe, war Folgendes:
Das hat mein Problem gelöst.
Ich füge einfach e (fx) clipse im Eclipse marketplace hinzu. Einfach und einfach
Ich hatte ein anderes Problem. In Projekt - Eigenschaften - Bibliotheken - JRE-Bibliothek hatte ich die falsche JRE-Lib-Version. Entfernen und setzen Sie die aktuelle und voila - alle Access restriction...
Warnungen sind weg.
Wir verwenden IBM Rational Application Developer (RAD) und hatten das gleiche Problem.
Fehlermeldung:
Zugriffsbeschränkung: Der Typ 'JAXWSProperties' ist keine API (Einschränkung der erforderlichen Bibliothek 'C:\IBM\RAD95\jdk\jre\lib\rt.jar').
Lösung:
gehen Sie zum Java-Erstellungspfad und entfernen Sie unter Bibliothek die JRE-Systembibliothek. Dann wieder Bibliothek hinzufügen -> JRE System Library
Ich benutze Eclipse Neon 3. Ich wollte nur javafx.application.Application verwenden, also folgte ich Christian Hujers Antwort oben und es funktionierte. Nur ein paar Tipps: Die Zugriffsregeln sind der import-Anweisung sehr ähnlich. Für mich waren die Zugriffsregeln "javafx/application/**". Ersetzen Sie einfach den Punkt in der Importanweisung durch einen Schrägstrich und das ist die Regel. Hoffentlich hilft das.