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 dies:
Zugriffsbeschränkung: Der Typ 'Anwendung' ist keine API (Einschränkung der erforderlichen Bibliothek '/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
Antworten:
Dies passierte auch mir und die hier gegebenen Antworten waren nicht zufriedenstellend, so dass ich meine eigenen Nachforschungen anstellte.
Hintergrund: Eclipse- Zugriffsbeschränkungen
Eclipse verfügt über einen Mechanismus namens Zugriffsbeschränkungen, um zu verhindern, dass Sie versehentlich Klassen verwenden, von denen Eclipse glaubt, dass sie nicht Teil der öffentlichen API sind. Normalerweise hat Eclipse in beiden Sinnen Recht: Wir möchten normalerweise nichts verwenden, was nicht Teil der öffentlichen API ist. Und Eclipse hat normalerweise Recht damit, was Teil der öffentlichen API ist und was nicht.
Problem
Jetzt kann es Situationen geben, in denen Sie öffentliche Nicht-APIs verwenden möchten, z. B.
sun.misc
(sollten Sie nicht, es sei denn, Sie wissen, was Sie tun). Und es kann Situationen geben, in denen Eclipse nicht wirklich richtig ist (das ist mir passiert, ich wollte es nur nutzenjavax.smartcardio
). In diesem Fall erhalten wir diesen Fehler in Eclipse.Lösung
Die Lösung besteht darin, die Zugriffsbeschränkungen zu ändern.
javax/smartcardio/**
", für dich könnte es stattdessen "com/apple/eawt/**
" sein.quelle
Ich hatte das gleiche Problem. Als ich das Java-Projekt zum ersten Mal in Eclipse erstellte, gab ich JRE 8 an. Als ich in den Erstellungspfad des Projekts ging und die JRE-Systembibliothek bearbeitete, wurde die Java 8-Ausführungsumgebung ausgewählt. Als ich mich für eine "Alernate JRE" (immer noch Java 8) entschieden habe, wurde der Fehler für mich behoben.
quelle
Wenn Sie in Eclipse Oxygen die Zugriffsberechtigung für Javafx hinzufügen, gehen Sie zu Projekt> Eigenschaften> Java-Erstellungspfad> Bibliotheken>, erweitern Sie die Bibliotheken und doppelklicken Sie auf> Zugriffsregeln. Dort legen Sie die Berechtigung fest. Lösung: Zugriffsregelmuster: Javafx / **
quelle
Zunächst ( und ohne Beziehung )
Application
scheint es nicht beabsichtigt zu sein , die Klasse selbst zu instanziieren . Nach dem, was man aus seiner Quelle lesen kann , wird eher erwartet, dass Sie die statische Instanz verwenden, die von zurückgegeben wirdgetApplication()
.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 nur das Paket, in dem sich die Superklasse befand, zu den von meinem Plugin importierten Paketen hinzufügen.Es gibt jedoch viele verschiedene Fehlerursachen, die auf "Einschränkung des erforderlichen Projekts / der erforderlichen Bibliothek " beruhen . Ähnlich wie bei dem oben beschriebenen Problem kann der von Ihnen verwendete Typ Abhängigkeiten zu Paketen aufweisen, die nicht von der Bibliothek exportiert oder selbst nicht exportiert werden. In diesem Fall können Sie versuchen, die fehlenden Pakete aufzuspüren und selbst zu exportieren, wie hier vorgeschlagen , oder Zugriffsregeln ausprobieren. Andere mögliche Szenarien sind:
Dies endete eher als eine Mischung aus einschränkungsbezogenen Themen als als eine tatsächliche Antwort. Da die Beschränkung auf erforderliche Projekte ein so vielseitiger Fehler ist, der gemeldet werden muss, ist das perfekte Rezept wahrscheinlich noch zu finden.
quelle
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.
quelle
Wir mussten unsere Anwendung ändern, um mit Windows-> Einstellungen-> Java-> Installierte JREs gegen das JDK 1.8 zu bauen . Nach dieser Änderung war die im Projektexplorer angegebene JRE-Systembibliothek jedoch immer noch falsch. Um dies zu beheben, klicken Sie mit der rechten Maustaste auf "JRE-Systembibliothek [false-jre-here]" und wechseln Sie von der Ausführungsumgebung zu "Workspace Default (yer-default-here)".
quelle
Es hat funktioniert: Projekteigenschaften -> ProjectFacets -> Runtimes -> jdk1.8.0_45 -> Apply
quelle
In der oberen Eclipse-Menüleiste:
quelle
Wenn Sie dasselbe Problem mit Spring Tool Suite haben:
Die zugrunde liegende IDE der Spring Tool Suite ist Eclipse. Ich habe diesen Fehler gerade beim Versuch bekommen, einige
com.sun.net
Klassen zu verwenden. So entfernen Sie diese Fehler und verhindern, dass sie auf der Eclipse Luna SR1 (4.4.2) -Plattform von STS auftreten:Du bist gut zu gehen.
quelle
Hatte das gleiche Problem. So habe ich es gelöst: Gehen Sie zum Paket-Explorer. Klicken Sie mit der rechten Maustaste auf JRE-Systembibliothek und gehen Sie zu Eigenschaften. Wählen Sie im Klassenpfadcontainer> JRE für den Projekterstellungspfad auswählen die dritte Option (Standard-JRE für den Arbeitsbereich).
Quelle: https://thenewboston.com/forum/topic.php?id=3917
quelle
Gehen Sie zur folgenden Einstellung:
Fenster -> Einstellungen -> Java-Compiler-Fehler / Warnungen-Veraltete und eingeschränkte API-Verbotene Referenz (Zugriffsregeln)
Stellen Sie es auf
Warning
oder einIgnore
.quelle
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 auf der Registerkarte Bibliothek die JRE-Systembibliothek. Dann wieder Bibliothek hinzufügen -> JRE-Systembibliothek
quelle
In Eclipse Mars.2 Release (4.5.2): Wählen
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
Sie JRE ... und drücken Sie Bearbeiten: Zum Arbeitsbereich wechseln JRE (jdk1.8.0_77)
Funktioniert bei mir.
quelle
Ich habe Eclipse JRE 8.112, nicht sicher, ob das wichtig ist, aber was ich getan habe, war Folgendes:
Dies löste mein Problem.
quelle
Ich füge einfach e (fx) clipse in den Eclipse-Marktplatz ein. Leicht und einfach
quelle
Ich verwende Eclipse Neon 3. Ich wollte nur javafx.application.Application verwenden, also folgte ich der obigen Antwort von Christian Hujer und es funktionierte. Nur ein paar Tipps: Die Zugriffsregeln sind der import-Anweisung sehr ähnlich. Für mich waren die von mir hinzugefügten Zugriffsregeln "javafx / application / **". Ersetzen Sie einfach den Punkt in der Importanweisung durch einen Schrägstrich und das ist die Regel. Hoffentlich hilft das.
quelle
Ich hatte ein etwas anderes Problem. In der Bibliothek Projekt - Eigenschaften - Bibliotheken - JRE hatte ich die falsche JRE lib-Version. Entfernen und setzen Sie die eigentliche und voila - alle
Access restriction...
Warnungen sind weg.quelle
Auch wenn es eine alte Frage ist, klicke ich in Eclipse einfach mit der rechten Maustaste auf den Ordner und die Eigenschaften von Src (Alt + Eingabetaste) und überprüfe, ob
Ignore optional compile problems
der Fehler behoben ist.quelle
Wenn jemand dieses Problem nur in Ihrem CI-Tool hat, während maven ausgeführt wird, bestand der Trick für mich darin, die Ausführungsumgebung in Ihrem explizit zu definieren
MANIFEST.MF
.In meinem Fall habe ich dazu die folgende Zeile in meine OSGi-Bundle-Manifestdatei eingefügt:
quelle