Beim Versuch, Javafx-bezogene Klassen in meinem neuen Java 8-Projekt zu verwenden, wird durch Eclipse ein Zugriffsbeschränkungsfehler angezeigt. Bisher war die einzige "Lösung", die ich finden konnte, Eclipse anzuweisen, die Zugriffsbeschränkung zu ignorieren, aber damit bin ich 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 verwende Eclipse Kepler mit dem Eclipse JDT-Patch für Java 8.
Dies scheint ein Problem zu sein, das damit zusammenhängt, dass JavaFX nicht Teil der JavaSE-Ausführungsumgebung ist.
Ich bin jetzt schwer verwirrt, da laut http://en.wikipedia.org/wiki/JavaFX JavaFX ein Teil von JavaSE ist. Ist es möglich, dass Eclipse nicht erkennt, dass es Teil von javaSE ist?
Antworten:
Aus Sicht von Eclipse ist der Fehler völlig korrekt, da JavaFX aus dem Erweiterungsklassenpfad stammt und nicht auf ALLEN Java8-VMs (z. B. IBM!) Verfügbar ist.
Wie beschrieben, können Sie diese Warnungen unterdrücken, indem Sie Zugriffsregeln oder IMHO hinzufügen. Die beste Lösung besteht darin, e (fx) clipse zu installieren, das dies automatisch für Sie erledigt und darüber hinaus sogar Tools für JavaFX CSS und FXML bereitstellt.
Sie können ein All-in-One-Paket unter http://efxclipse.bestsolution.at/install.html herunterladen
quelle
Ich werde hier noch eine Antwort hinzufügen, nur um das zu liefern, was ich für den minimalsten Ansatz halte. In meinem Eclipse-Setup ist e (fx) clipse installiert, das eine Lösung dafür sowie viele nützliche Entwicklungsfunktionen bietet, die Sie mit ziemlicher Sicherheit benötigen, wenn Sie JavaFX-Anwendungen schreiben. Dies ist wahrscheinlich der praktischste Ansatz. Wenn Sie dieses Plugin aus irgendeinem Grund nicht möchten, wird das Problem mit der in dieser Antwort beschriebenen Lösung mit der geringsten Anzahl anderer Nebenwirkungen behoben.
Wie in anderen Antworten ausgeführt, erlaubt Eclipse standardmäßig den Zugriff auf Klassen in JAR-Dateien im Verzeichnis jre / lib / ext, da nicht garantiert wird, dass diese 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 am Speicherort lib / ext verfügbar ist.
Die minimale Lösung hierfür besteht darin, den Zugriff auf die Klassen in dieser JAR-Datei (und nur in dieser JAR-Datei) zuzulassen. Klicken Sie dazu mit der rechten Maustaste auf das Projekt und rufen Sie das Dialogfeld Projekteigenschaften auf. Wählen Sie im linken Bereich "Pfad erstellen" und dann die Registerkarte "Bibliotheken". Sie sehen einen Eintrag "JRE System Library". Erweitern Sie diesen Eintrag, und Sie sehen einen Untereintrag "Zugriffsregeln":
Wählen Sie den Eintrag "Zugriffsregeln" und klicken Sie auf "Bearbeiten". Klicken Sie auf "Hinzufügen".
Wählen Sie unter "Auflösung" "Zugänglich" und geben Sie unter "Regelmuster" Folgendes ein
javafx/**
:Klicken Sie auf OK, um alle Dialoge zu schließen.
Diese Einstellung ermöglicht den Zugriff auf alle Klassen in allen beginnenden Paketen
javafx.
, behält jedoch die Regel im ext-Ordner für alle anderen Klassen bei und ist in diesem Sinne "minimal".Auch hier möchten Sie wahrscheinlich das e (fx) clipse-Plugin installieren, aber meines Wissens ist dies die Lösung mit den geringsten Nebenwirkungen auf Ihr Eclipse-Setup.
quelle
e(fx)clipse is providing many useful development features
. Ein neues Element,SashPane
das einigeSliderPane
Probleme behebt , wurde in e (fx) clipse 2.6 hinzugefügt, aber ich kann es wirklich nicht verstehen. Gibt es Klassen, die wir aus e (fx) clipse verwenden können? Ich kann nichts Ähnliches finden. Ich meine, ich kann nicht auf eine Klasse zugreifen oder etwas Nützliches finden, das ich im Programm verwenden kann, als Bibliothek meine ich. Korrigieren Sie mich, weil ich weiß, dass ich hier irgendwo falschIch habe das Problem behoben, indem ich das JDK entfernt und in den Erstellungspfad eingelesen habe. Fragen Sie mich aber nicht, warum das funktioniert.
quelle
Der einfache Weg ist die Installation von e (fx) clipse - einem Plugin für Eclipse zur Unterstützung von JavaFX:
Originalinformationen finden Sie hier: https://www.eclipse.org/efxclipse/install.html#for-the-lazy
quelle
Ich habe dieses Problem durch sorgfältige Verwendung des Erstellungspfads des Eclipse-Projekts behoben.
Dadurch sieht Eclipse die Datei jfxrt.jar nur als reguläre JAR-Datei eines Drittanbieters. Die Reihenfolge ist wichtig, damit dies Vorrang vor dem Eintrag in der JRE-Systembibliothek hat. Es ist dieselbe tatsächliche JAR-Datei, aber Eclipse sieht sie anders.
Möglicherweise möchten Sie die Ausführungskonfigurationen ändern, damit nicht die exportierte Version von jfxrt.jar verwendet wird. In der Praxis macht dies jedoch keinen Unterschied.
Ich habe dies mit Java8 und Eclipse Luna gemacht. Aber das Prinzip würde ich sicher mit jeder Kombination von Java und Eclipse arbeiten.
quelle
unter Bibliotheken
Hinweis: Stellen Sie sicher, dass in Eclipse / Preferences (NICHT im Projekt) / Java / Installed JRE das JDK auf den JDK-Ordner verweist und nicht auf JRE C: \ Programme \ Java \ jdk1.8.0_74
quelle
Ich weiß, dass dies bereits beantwortet wurde, aber ich finde die vorgeschlagenen Lösungen klobig.
Andere Option
In der Version 'Mars' (und möglicherweise in früheren Versionen) können Sie Fehler bei Zugriffsbeschränkungen deaktivieren. Unter
Java-> Compiler-> Fehler- / Warnansicht
und
"Veraltete und eingeschränkte API"
Sie können "Verbotene Referenz (Zugriffsregel)" so einstellen, dass sie ignoriert wird.
quelle
Folge diesen Schritten:
Fügen Sie die Datei jfxrt.jar (aus Ihrem Installationsordner) als "Externe JAR-Datei" auf der Registerkarte "Bibliotheken" hinzu.
Stellen Sie auf der Registerkarte "Bestellen / Exportieren" sicher, dass diese jfxrt.jar an erster Stelle in der Liste steht.
Das hat bei mir funktioniert.
quelle
Wie James_D bereits vorgeschlagen hat, habe ich meiner Klassenpfaddatei Zugriffsregeln hinzugefügt. Ich habe das e (fx) clipse-Plugin vorerst deinstalliert, da es einen CSS-Validierungsfehler aufweist (siehe Deaktivieren der CSS-Warnung "Unbekannte Eigenschaft" in Eclipse Mars? ).
Hier ist mein Eintrag in der Klassenpfaddatei für den JRE-Container:
quelle
Ich hatte das gleiche Problem. Ich habe die Lösung von James_D verwendet, aber seine genaue Lösung hat bei mir nicht funktioniert. Aber mit
**/javafx/**
anstattjavafx/**
das Problem für mich zu lösen. Hoffentlich hilft das.PS: Ich würde dies als Kommentar unter James_Ds Lösung posten, aber ich habe mich gerade registriert und hatte nicht genug "Ruf", um dies zu tun.
quelle
Schritt 1: Navigieren Sie zu Ihrer Datei 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 und erstellen Sie einen neuen Ordner wie folgt: [Erstellen des Ordnernamens lib, um unsere Datei jfxrt.jar abzulegen] [2] [2]: https://i.stack.imgur.com/YsJ5S.png
Schritt 4: Wählen Sie den Ordner lib aus und drücken Sie STRG + V, um die Datei jfxrt.jar einzufügen. [Fügen Sie Ihre Datei jfxrt.jar ein] [1] [1]: https://i.stack.imgur.com/Ljogu.png
Schritt 5: Klicken Sie mit der rechten Maustaste auf jfxrt.jar und legen Sie den Erstellungspfad fest.
quelle