Exécution d'applications JavaFX avec Java 11 et versions ultérieures

Les versions récentes de Java ne livrent plus JavaFX en standard, nécessitant une configuration manuelle des chemins. Pour Java 8, l'intégration se fait nativement.

Cet article se divise en deux parties : la première explique l'exécution d'applications JavaFX, la seconde détaille la création d'une environnement JRE intégrant JavaFX.

Exécution d'applications JavaFX

Téléchargement d'OpenJFX https://gluonhq.com/products/javafx/

La version LTS d'OpenJFX semble nécessiter un paiement, il est donc recommandé de sélectinoner "Include older versions" pour télécharger une version non LTS.

Après décompression dans un répertoire approprié (par exemple : /opt/java/jfx/javafx-sdk-17), l'exécution d'un fichier JAR s'effectue via la commande suivante :

java --module-path "/opt/java/jfx/javafx-sdk-17/lib" --add-modules javafx.controls -jar mon-application.jar

Remplacez les chemins et le nom du programme par vos valeurs spécfiiques.

Création d'un JRE personnalisé avec JavaFX

Téléchargez et décompressez javafx-17-jmods dans un répertoire distinct (par exemple : /opt/java/jfx/javafx-jmods-17). Notez la différence entre jmods et le SDK utilisé précédemment !

Utilisez l' JDK-17 pour exécuter :

java --module-path "/opt/java/jfx/javafx-sdk-17/lib" --list-modules

Cette commande affiche la liste des modules disponibles. Vous pouvez créer un JRE contenant tous ces modules ou sélectionner uniquement ceux dont vous avez besoin.

La syntaxe pour créer un J personnalisé est :

jlink --module-path <chemin-javafx/lib> --add-modules <module1[,module2[, ...]]> --output <chemin-sortie>

Voici un exemple d'exécution :

jlink --module-path "/opt/java/jfx/javafx-jmods-17" --add-modules java.base,java.compiler,java.datatransfer,java.desktop,java.instrument,java.logging,java.management,java.management.rmi,java.naming,java.net.http,java.prefs,java.rmi,java.scripting,java.se,java.security.jgss,java.security.sasl,java.smartcardio,java.sql,java.sql.rowset,java.transaction.xa,java.xml,java.xml.crypto,jdk.accessibility,jdk.charsets,jdk.crypto.cryptoki,jdk.crypto.ec,jdk.crypto.mscapi,jdk.dynalink,jdk.httpserver,jdk.incubator.foreign,jdk.incubator.vector,jdk.internal.vm.ci,jdk.internal.vm.compiler,jdk.internal.vm.compiler.management,jdk.jdwp.agent,jdk.jfr,jdk.jsobject,jdk.localedata,jdk.management,jdk.management.agent,jdk.management.jfr,jdk.naming.dns,jdk.naming.rmi,jdk.net,jdk.nio.mapmode,jdk.sctp,jdk.security.auth,jdk.security.jgss,jdk.unsupported,jdk.xml.dom,jdk.zipfs,javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web --output /home/utilisateur/myjre17

Le module javafx.swt ne peut être ajouté car javafx.swt.jar ne contient pas de fichier module-info.class, le rendant non reconnu comme module.

Le JRE ainsi généré peut exécuter directement des applications JavaFX.

Étiquettes: Java javafx jre jlink modules

Publié le 4 juin à 03h14