wake-up-neo.com

IntelliJ IDEA - Fehler: JavaFX-Laufzeitkomponenten fehlen und werden zum Ausführen dieser Anwendung benötigt

Ich führe IntelliJ IDEA Ultimate 2018.2.5 mit JDK 11.0.1 und JavaFX 11 von OpenJFX aus. Ich weiß, dass es ein häufiger Fehler ist, und ich habe viele der vorgeschlagenen Korrekturen ausprobiert, aber nichts funktioniert.

Egal welches JavaFX-Projekt ich ausführen möchte, ich bekomme die Fehlermeldung:

Error: JavaFX runtime components are missing, and are required to run this application

Wenn ich den VM - Optionen Folgendes hinzufügen: 

 --module-path="C:\Program Files\Java\javafx-sdk-11\lib" --add-modules=javafx.controls

Ich bekomme diese Fehler:

Exception in Application start method
Java.lang.reflect.InvocationTargetException
    at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
    at Java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.base/Java.lang.reflect.Method.invoke(Method.Java:566)
    at javafx.graphics/com.Sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.Java:464)
    at javafx.graphics/com.Sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.Java:363)
    at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
    at Java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.base/Java.lang.reflect.Method.invoke(Method.Java:566)
    at Java.base/Sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.Java:1051)
Caused by: Java.lang.RuntimeException: Exception in Application start method
    at javafx.graphics/com.Sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.Java:900)
    at javafx.graphics/com.Sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.Java:195)
    at Java.base/Java.lang.Thread.run(Thread.Java:834)
Caused by: Java.lang.IllegalAccessError: class com.Sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x5fce9dc5) cannot access class com.Sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.Sun.javafx.util to unnamed module @0x5fce9dc5
    at com.Sun.javafx.fxml.FXMLLoaderHelper.<clinit>(FXMLLoaderHelper.Java:38)
    at javafx.fxml.FXMLLoader.<clinit>(FXMLLoader.Java:2056)
    at sample.Main.start(Main.Java:13)
    at javafx.graphics/com.Sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.Java:846)
    at javafx.graphics/com.Sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.Java:455)
    at javafx.graphics/com.Sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.Java:428)
    at Java.base/Java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.Sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.Java:427)
    at javafx.graphics/com.Sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.Java:96)
    at javafx.graphics/com.Sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.Sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.Java:174)
    ... 1 more
Exception running application sample.Main

Ich habe eine Neuinstallation ohne Erfolg versucht. Ich habe auch versucht, getClass().getResource(...) in getClass().getClassLoader().getResource(...) oder in etwas wie Parent root = FXMLLoader.load(getClass().getResource("/sample.fxml")); zu ändern, funktioniert aber trotzdem nicht.

1
abg

Es gibt ähnliche Fragen wie this oder dieses andere one .

Wenn Sie vor JavaFX 11 etwas JavaFX-bezogenes Objekt aufgerufen haben, hatten Sie alle Javafx-Module im SDK verfügbar.

Nun müssen Sie jedoch die benötigten Module/Abhängigkeiten angeben.

Ihr Fehler besagt, dass Sie FXML verwenden, aber nicht aufgelöst werden können. Sie haben jedoch gerade das Modul javafx.controls hinzugefügt:

--add-modules=javafx.controls

Wie Sie in JavaDoc sehen können, hängt das javafx.controls-Modul von javafx.graphics und Java.base ab, aber keines dieser Module enthält die FXML-Klassen.

Wenn Sie FXML-Klassen wie die Variable FXMLLoader benötigen, müssen Sie das Modul javafx.fxml einfügen:

 --module-path="C:\Program Files\Java\javafx-sdk-11\lib" \
    --add-modules=javafx.controls,javafx.fxml

Das Gleiche gilt, wenn Sie Medien oder Webkits benötigen, die über eigene modules verfügen.

6
José Pereda