Verwendung von JavaFX in JRE 8, “Zugriffsbeschränkung” -Fehler

Beim Versuch, Java-bezogene classn in meinem neuen Java-8-Projekt zu verwenden, erhalte ich einen Zugriffsbeschränkungserrors von Eclipse. Bisher war die einzige “Lösung”, die ich finden konnte, zu sagen, dass Eclipse die Zugangsbeschränkung ignoriert, aber ich bin damit nicht zufrieden. Ein Beispiel für den Fehler:

Access restriction: The type Pane is not accessible due to restriction on required library C:\Program Files\Java\jre8_0\lib\ext\jfxrt.jar 

Ich benutze Eclipse Kepler mit dem Eclipse JDT Patch für Java 8.

Dies scheint ein Problem zu sein, das darauf zurückzuführen ist, dass JavaFX kein Bestandteil der JavaSE-Ausführungsumgebung ist.

Ich bin jetzt zäh verwirrt als nach http://en.wikipedia.org/wiki/JavaFX javaFX ist ein Teil des JavaSE. Ist es möglich, dass Eclipse nicht erkennt, dass es ein Teil der JavaSE ist?

Aus Sicht von Eclipse ist der Fehler völlig korrekt, da JavaFX vom classnpfad der Erweiterung kommt und nicht auf ALLEN Java8-VMs verfügbar ist (zB ibm!).

Wie bereits erwähnt, können Sie diese Warnungen unterdrücken, indem Sie Zugriffsregeln oder IMHO hinzufügen. Die beste Lösung ist die Installation von e (fx) clipse, die dies automatisch für Sie erledigt und Ihnen außerdem Tools für JavaFX CSS und FXML zur Verfügung stellt.

Sie können ein All-in-One-Paket von http://efxclipse.bestsolution.at/install.html herunterladen

Ich werde hier noch eine Antwort hinzufügen, nur um das zu bieten, was ich für den minimalsten Ansatz halte. In meinem Eclipse-Setup habe ich e (fx) clipse installiert, was einen Fix dafür bietet und viele nützliche Entwicklungsfunktionen bietet, die Sie mit Sicherheit wollen, wenn Sie JavaFX-Anwendungen schreiben. Dies ist wahrscheinlich der praktischste Ansatz. Wenn Sie dieses Plugin aus irgendeinem Grund nicht möchten, wird die Lösung, die in dieser Antwort beschrieben wird, das Problem mit der geringsten Menge anderer Nebenwirkungen beheben.

Wie bereits in anderen Antworten erwähnt, lässt Eclipse standardmäßig den Zugriff auf classn in JAR-Dateien im Verzeichnis jre / lib / ext nicht zu, da diese nicht auf allen Java-Plattformen vorhanden sind. Wenn Sie eine JavaFX 8-Anwendung schreiben, gehen Sie davon aus, dass Sie sich auf einer Plattform befinden, auf der jfxrt.jar im Verzeichnis lib / ext verfügbar ist.

Die minimale Lösung dafür ist der Zugriff auf die classn in dieser JAR-Datei (und nur in dieser JAR-Datei). Klicken Sie dazu mit der rechten Maustaste auf das Projekt und rufen Sie den Projekteigenschaften-Dialog auf. Wählen Sie “Build Path” im linken Bereich und wählen Sie die Registerkarte “Bibliotheken”. Sie sehen einen Eintrag “JRE System Library”. Erweitern Sie diesen Eintrag, und Sie sehen einen Untereintrag “Zugriffsregeln”:

Bildbeschreibung hier eingeben

Wählen Sie den Eintrag “Zugriffsregeln” und klicken Sie auf “Bearbeiten”. Klicken Sie auf “Hinzufügen”.

Bildbeschreibung hier eingeben

Wählen Sie unter “Resolution” “Accessible” und geben Sie unter “Rule Pattern” javafx/** :

Bildbeschreibung hier eingeben

Klicken Sie auf OK, um alle Dialoge zu schließen.

Diese Einstellung ermöglicht den Zugriff auf alle classn in allen Paketen, die mit javafx. , behält aber die Regel für alle anderen classn im ext-Ordner bei und ist in diesem Sinne “minimal”.

Noch einmal, was Sie wahrscheinlich wirklich tun möchten, ist die Installation des e (fx) Clipse-Plugins, aber meines Wissens ist dies die Lösung mit den geringsten Nebenwirkungen auf Ihre Eclipse-Einrichtung.

Ich habe das Problem getriggers, indem ich das JDK aus dem Build-Pfad entfernt und gelesen habe. Frag mich nicht, warum das funktioniert.

Ich habe dieses Problem durch sorgfältige Verwendung des Buildpfads des Eclipse-Projekts behoben.

  • Rufen Sie die Eigenschaften Ihres Anwendungsprojekts auf und wählen Sie den Abschnitt “Pfad erstellen”.
  • Fügen Sie jre8_0 \ lib \ ext \ jfxrt.jar als “Externe JAR-Datei” in der Registerkarte “Bibliotheken” hinzu.
  • Stellen Sie sicher, dass diese jfxrt.jar in der ‘Order / Export’ Registerkarte zuerst in der Liste ist.

Durch dieses Vorgehen wird Eclipse als jfxrt.jar nur als reguläre JAR-Datei von Drittanbietern angezeigt. Die Reihenfolge ist wichtig, damit diese Vorrang vor dem Eintrag in der JRE-Systembibliothek hat. Es ist die gleiche JAR-Datei, aber Eclipse sieht es anders.

Möglicherweise möchten Sie alle Laufkonfigurationen ändern, damit die Version “exportierte” jfxrt.jar nicht verwendet wird. In der Praxis wird dies jedoch keinen Unterschied machen.

Ich habe das mit Java8 und Eclipse Luna gemacht; aber der Prinzipal würde ich mit jeder Kombination von Java und Eclipse arbeiten.

Der einfachste Weg ist die Installation von e (fx) clipse – ein Plugin für Eclipse zur Unterstützung von JavaFX:

  1. Wählen Sie Hilfe -> Neue Software installieren
  2. Klicken Sie auf Hinzufügen, um die folgende Site hinzuzufügen:
  3. OK klicken
  4. Wählen Sie in der “Arbeiten mit” die kürzlich hinzugefügte Website “efxclipse”
  5. Aktivieren Sie das Kontrollkästchen “e (fx) clipse – install”, um alle Komponenten dieser Auswahl zu installieren
  6. Wechseln Sie zu den nächsten Schritten, um die Installation zu beenden
  7. Starte deinen Eclipse neu. Wenn die JavaFX-Bibliothek immer noch nicht erkannt wird, starten Sie sie erneut.

Ursprüngliche Informationen finden Sie hier: https://www.eclipse.org/efxclipse/install.html#for-the-lazy

  • Gehe zum Build-Pfad des aktuellen Projekts

unter Bibliotheken

  • Wählen Sie die ” JRE System Library [jdk1.8xxx]”
  • Klicken Sie auf Bearbeiten
  • und wählen Sie entweder “Workspace default JRE (jdk1.8xx)” ODER Alternative JRE
  • Klicken Sie auf Fertig stellen
  • OK klicken

Bildbeschreibung hier eingeben

Hinweis: Stellen Sie in Eclipse / Preferences (NICHT im Projekt) / Java / Installierte JRE sicher, dass der jdk auf den JDK-Ordner und nicht auf JRE C: \ Programme \ Java \ jdk1.8.0_74 verweist

Bildbeschreibung hier eingeben

folge diesen Schritten:
1. Fügen Sie die Datei jfxrt.jar (aus Ihrem Installationsordner) als “Externe JAR-Datei” in der Registerkarte “Bibliotheken” hinzu.

  1. Stellen Sie sicher, dass diese jfxrt.jar in der ‘Order / Export’ Registerkarte zuerst in der Liste ist.

Das hat für mich funktioniert

Ich weiß, dass dies bereits beantwortet wurde, aber ich finde die vorgeschlagenen Lösungen klobig.

  1. Ich möchte kein Plugin installieren, nur um einen ungültigen Fehler zu vermeiden.
  2. Das Hinzufügen von jfxrt.jar als externes jar wird funktionieren, ist aber eine schlechte Idee, wenn Sie einen Export durchführen, da jfxrt.jar ebenfalls exportiert wird. Wahrscheinlich nicht was du willst.

Andere Option

In ‘Mars’ Release (und möglicherweise früheren Versionen) können Sie Zugriffsbeschränkungen deaktivieren. Unter

Java-> Compiler-> Fehler / Warnungen Ansicht

und

“Veraltete und eingeschränkte API”

Sie können festlegen, dass “Verbotene Referenz (Zugriffsregel)” ignoriert werden soll.

Bildbeschreibung hier eingeben

Wie James_D bereits vorgeschlagen habe, habe ich Zugriffsregeln für meine Classpath-Datei hinzugefügt. Ich habe das e (fx) clipse plugin vorerst deinstalliert, da es einen CSS-validationserrors hat (siehe Wie deaktiviere ich css Warnung “Unbekannte Eigenschaft” in Eclipse Mars? ).

Hier ist mein Eintrag in der Classpath-Datei für den JRE-Container:

          

Ich hatte das gleiche Problem. Ich habe die Lösung von James_D benutzt, aber seine genaue Lösung funktionierte nicht für mich. Aber die Verwendung von **/javafx/** anstelle von javafx/** triggerse das Problem für mich. Ich hoffe, das hilft.

PS: Ich würde dies als Kommentar unter der Lösung von James_D veröffentlichen, aber ich habe mich nur registriert und hatte nicht genug “Reputation”, um das zu tun.

Schritt-1: Navigieren Sie zu Ihrer jfxrt.jar. C: \ Programme \ Java \ jre1.8.0_111 \ lib \ ext

Schritt-2 Kopieren Sie die Datei jfxrt.jar

Schritt-3: Gehen Sie zu Eclipse, erstellen Sie einen neuen Ordner wie folgt: [Erstellen des Ordnernamens lib, um unsere jfxrt.jar-Datei zu speichern] [2] [2]: https://i.stack.imgur.com/YsJ5S.png

Schritt-4: Wähle den lib-Ordner und drücke STRG + V, um die jfxrt.jar einzufügen [Paste your jfxrt.jar] [1] [1]: https://i.stack.imgur.com/Ljogu.png

Schritt-5: Klicken Sie mit der rechten Maustaste auf jfxrt.jar und legen Sie als Build Path fest.