web-dev-qa-db-fra.com

IntelliJ IDEA - Erreur: des composants d'exécution JavaFX sont manquants et sont nécessaires pour exécuter cette application.

J'utilise IntelliJ IDEA Ultimate 2018.2.5 avec JDK 11.0.1 et JavaFX 11 d'OpenJFX . Je sais que c'est une erreur courante et j'ai essayé beaucoup des correctifs proposés mais rien ne fonctionne.

Quel que soit le projet JavaFX que j'essaie de lancer, l'erreur est la suivante:

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

Si j'ajoute ce qui suit aux options VM 

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

Je reçois ces erreurs:

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

J'ai essayé de réinstaller sans aucune chance. J'ai également essayé de changer getClass().getResource(...) en getClass().getClassLoader().getResource(...) ou de quelque chose comme Parent root = FXMLLoader.load(getClass().getResource("/sample.fxml")); mais ne fonctionne toujours pas.

1
abg

Il y a des questions similaires comme ceci ou cet autre un .

Avant JavaFX 11, chaque fois que vous appeliez quelque chose lié à JavaFX, tous les modules javafx étaient disponibles dans le SDK.

Mais maintenant, vous devez inclure les modules/dépendances dont vous avez besoin.

Votre erreur indique que vous utilisez FXML mais cela ne peut pas être résolu, mais vous venez d'ajouter le module javafx.controls:

--add-modules=javafx.controls

Comme vous pouvez le constater dans le module JavaDoc , le module javafx.controls dépend de javafx.graphics et Java.base, mais aucun de ces modules n'inclut les classes FXML.

Si vous avez besoin de classes FXML telles que FXMLLoader, vous devez inclure le module javafx.fxml:

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

La même chose s’applique si vous avez besoin d’un média ou d’un kit Web, ceux-ci ont leurs propres modules .

6
José Pereda