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.