J'ai créé un projet JavaFX dans IntelliJ. Je peux exécuter un projet dans IntelliJ. J'ai ajouté le code ci-dessous dans les configurations):
--module-path ${PATH_TO_FX} --add-modules=javafx.controls,javafx.fxml
Mais le fichier .jar de sortie du projet (créé avec Artifects) ne s'exécute pas. J'ai testé ces commandes, mais je n'ai eu aucune chance:
Java --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml -jar Timer.jar
Java --module-path %PATH_TO_FX% --add-modules javafx.controls Timer.jar
Dernier journal des erreurs de la ligne de commande:
Error: Could not find or load main class Files\Java\javafx-sdk-11.0.1\lib
Caused by: Java.lang.ClassNotFoundException: Files\Java\javafx-sdk-11.0.1\lib
p.s: je pourrais exécuter le fichier .jar de ce projet lors de la construction sur JDK-10
MODIFIER :
J'ai téléchargé JavaFX et ajouté son dossier lib aux environnements système. pour ajouter JavaFX au projet, j'ai fait ce processus: Structure du projet> Bibliothèques> ajouter> Java> JavaFxPath/lib
J'ai ensuite créé Artifect pour le fichier jar de sortie dans ce processus: Structure du projet> Artifects> Ajouter> JAR> À partir de modules avec dépendances> Classe principale: main.Main.
Si vous disposez d'un projet JavaFX 11 simple (non modulaire) (sans outils de construction Maven/Gradle) et que vous utilisez IntelliJ, comme l'exemple HelloFX de ici , voici comment vous pouvez créer un bocal d'IntelliJ qui peut être exécuté à partir de la console
Un tutoriel complet sur la façon d'exécuter le projet peut être trouvé ici , et des instructions sur la façon de créer un bocal sont ici (voir la section Projet non modulaire), mais ceux-ci ne le font pas ne couvre pas Artifacts
d'IntelliJ.
Vérifiez que le projet HelloFX s'exécute à partir d'IntelliJ avec ces options VM:
--module-path ${PATH_TO_FX} --add-modules javafx.controls,javafx.fxml
où PATH_TO_FX
a été défini dans File -> Settings -> Appearance & Behavior -> Path Variables
, pointant vers JavaFX SDK lib.
Semi gros pot
Nous pouvons créer un Jar qui contient uniquement les classes du projet et les dépendances tierces, mais pas celles JavaFX.
Aller à File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies
, ajoutez votre classe principale, acceptez.
Ensuite supprimez les jarres JavaFX de la liste et acceptez.
Générez le projet, il créera un pot assez petit (3 Ko dans ce cas).
Vous devriez maintenant pouvoir l'exécuter comme:
Java --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml -jar out\artifacts\HelloFX_jar\HelloFX.jar
(sois sûr que %PATH_TO_FX%
pointe vers un dossier valide et utilise des guillemets s'il contient des espaces.
Vous pouvez distribuer ce pot et l'exécuter sur d'autres plates-formes, à condition que celles-ci disposent également du SDK JavaFX.
Pot de graisse
Si vous voulez un bocal complet contenant des dépendances JavaFX, vous pouvez toujours utiliser des artefacts.
Aller à File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies
, ajoutez votre classe principale, acceptez.
Alors conservez les jarres JavaFX dans la liste, et acceptez. Générez le projet.
En théorie, vous devriez pouvoir l'exécuter comme:
Java -jar out\artifacts\HelloFX_jar\HelloFX.jar
Mais cela ne fonctionnera pas.
Raison 1: Vous avez besoin d'une classe de lancement, comme expliqué ici .
Créez donc une classe de lancement:
public class Launcher {
public static void main(String[] args) {
Main.main(args);
}
}
Raison 2: Si vous ajoutez uniquement vos pots SDK au gros pot, vous manquerez les bibliothèques natives, comme expliqué ici .
Modifiez donc l'artefact, sélectionnez la classe Launcher comme classe principale et ajoutez les bibliothèques natives (Directory Content -> path-to/JavaFX SDK/bin
sous Windows):
Maintenant, construisez le projet (maintenant le pot fait environ 33 Mo et contient des bibliothèques natives inutiles) et exécutez:
Java -jar out\artifacts\HelloFX_jar\HelloFX.jar
Vous pouvez distribuer ce pot, mais uniquement sur les plateformes Windows.
Vous pouvez créer des fichiers JAR similaires pour d'autres plates-formes, si vous téléchargez leurs SDK JavaFX, et vous pouvez également créer des fichiers JAR multi-plateformes si vous les ajoutez tous ensemble, comme expliqué dans les réponses liées ci-dessus.
Quoi qu'il en soit, vous devriez envisager d'utiliser jlink
à la place .
Remarque
À propos de cette erreur:
Provoqué par: Java.lang.ClassNotFoundException: Files\Java\javafx-sdk-11.0.1\lib
il semble que le chemin de la bibliothèque ait été défini sans guillemets et il manque la première partie du chemin C:\Program Files\...
. Assurez-vous simplement d'utiliser des guillemets:
set PATH_TO_FX="C:\Program Files\Java\javafx-sdk-11.0.1\lib"
J'ai eu le même problème lors de l'exportation/génération d'un Jar à l'aide de JavaFX et IntelliJ non modulaire avec Gradle ( https://openjfx.io/ openjfx-docs / )
Le bocal que je générais à l'aide de la commande Gradle jar ne s'exécute pas et génère une erreur indiquant qu'il ne trouve pas ma classe principale. Quand j'ai ouvert mon pot, j'ai pu localiser ma classe principale. J'ai donc réalisé que l'erreur était liée à l'emballage des pots.
J'ai résolu le problème en ajoutant JavaFX SDK à mon Java SDk dans IntelliJ comme indiqué ci-dessous.
Après cela, j'utilise la commande régulière Gradle build Jar pour générer mon fichier Jar (comme indiqué ci-dessous) et il fonctionne normalement.