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.
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 .