web-dev-qa-db-fra.com

Utilisation de JavaFX avec Intellij IDEA

J'ai suivi un tutoriel avec précision et je n'arrive pas à le faire fonctionner. Le didacticiel se trouve sous JavaFX and IntellijNon-modular from IDE sections: https://openjfx.io/openjfx-docs/#install-Java

Voici le message d'erreur que je reçois lorsque j'essaie d'exécuter le projet Intellij Idea JavaFX par défaut:

"C:\Program Files\Java\jdk-11.0.1\bin\Java.exe" --module-path %PATH_TO_FX% --add-modules=javafx.controls,javafx.fxml --add-modules javafx.base,javafx.graphics --add-reads javafx.base=ALL-UNNAMED --add-reads javafx.graphics=ALL-UNNAMED "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2018.3\lib\idea_rt.jar=53491:C:\Program Files\JetBrains\IntelliJ IDEA 2018.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\jonat\IdeaProjects\Tawe-Lib FX\out\production\Tawe-Lib FX;C:\Program Files\Java\javafx-sdk-11.0.1\lib\src.Zip;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx-swt.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.web.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.base.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.fxml.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.media.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.swing.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.controls.jar;C:\Program Files\Java\javafx-sdk-11.0.1\lib\javafx.graphics.jar" sample.Main
Error occurred during initialization of boot layer
Java.lang.module.FindException: Module javafx.base not found

Process finished with exit code 1

Cela n'a pas de sens pour moi, comme je peux le voir javafx.base sous lib dans la barre latérale: enter image description here

Le chemin menant à jdk-11.0.1 et javafx-sdk-11.0.1:

C:\Program Files\Java

Java est installé:

C:\Users\jonat>Java --version
openjdk 11.0.1 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)

Java_HOME la variable (mentionnée dans le guide) est définie:

C:\Users\jonat>echo %Java_HOME%
C:\Program Files\Java\jdk-11.0.1

PATH_TO_FX la variable est définie:

C:\Users\jonat>echo %PATH_TO_FX%
C:\Program Files\Java\javafx-sdk-11.0.1\lib

Je ne sais vraiment pas où aller d'ici. J'ai suivi le tutoriel avec précision et cela ne fonctionne pas. Toute aide serait grandement appréciée et si vous avez besoin de plus d'informations, veuillez simplement laisser un commentaire à ce sujet.

Sur la base de la ligne de commande publiée, voici ce qu'IntelliJ applique pour exécuter votre projet:

"C:\Program Files\Java\jdk-11.0.1\bin\Java.exe" --module-path %PATH_TO_FX% --add-modules=javafx.controls,javafx.fxml

Le problème est donc assez clair: dans les options VM vous avez défini verbatim ce que le tutoriel dit:

enter image description here

Mais vous n'avez pas appliqué votre vrai chemin pour PATH_TO_FX, comme il est suggéré dans l'image insérée après cette commande dans le tutoriel:

enter image description here

IntelliJ ne résout pas cette variable et le chemin du module n'est pas défini, vous obtenez donc l'erreur attendue qui révèle que les modules JavaFX ne sont pas trouvés:

Error occurred during initialization of boot layer
Java.lang.module.FindException: Module javafx.controls not found

Solution

Cela peut être résolu de deux manières:

  1. Appliquez votre chemin:

Modifiez les configurations d'exécution et dans les options VM ajoutez votre chemin:

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

Appliquez et exécutez. Ça devrait marcher.

  1. Ajoutez la variable d'environnement

Vous pouvez également définir une variable d'environnement. Aller à IntelliJ->File->Settings->Appearance & Behavior->Path Variables, et ajouter PATH_TO_FX, avec le chemin d'accès au dossier lib:

enter image description here

Et puis vous pouvez utiliser les littéraux $PATH_TO_FX$ ou ${PATH_TO_FX} dans les options VM:

--module-path ${PATH_TO_FX} --add-modules=javafx.controls,javafx.fxml

Appliquez et exécutez.

Notez qu'il s'agit d'une solution plus permanente qui peut s'appliquer à tout autre projet JavaFX.

9
José Pereda