IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Démarrer avec JavaFX


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 74
    Par défaut Démarrer avec JavaFX
    Bonjour

    J'ai commencé un projet avec Java Swing, mais certaines fonctionnalités de mon projet ne semblent pas être possible avec Swing
    De plus il semble que Swing n'est plus maintenu depuis plusieurs années, et comme mon projet est de faire évoluer un projet existant écrit en C uniquement sur Windows, vers une mise à jour avec des outils modernes et qu'il soit disponible sur plusieurs plateformes, je me tourne donc vers JavaFX
    Mom premier essai n'est pas fructueux
    Je développe avec Eclipse sous MacOS
    J'ai installé le SDK et JavaFX tous deux en versions 25
    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    package fr.free.cdmrail;
     
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.Label;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
     
    public class CdmRail extends Application {
     
    	@Override
    	public void start(Stage stagePrincipal) {
    		Label message = new Label("Bienvenue dans GestionFacile");
    		StackPane racine = new StackPane(message);
    		Scene scene = new Scene(racine, 480, 320);
     
    		stagePrincipal.setTitle("GestionFacile - Atelier Kodo");
    		stagePrincipal.setScene(scene);
    		stagePrincipal.show();
    	}
     
    	public static void main(String[] args) {
    		Application.launch(args);
    	}
    }
    Le fichier module-info.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    module CDMRAIL {
    	requires javafx.controls;
    	requires javafx.fxml;
    	requires javafx.graphics;
    	requires javafx.media;
    	requires javafx.swing;
    	requires javafx.web;
    	requires java.desktop;
     
    	opens fr.free.cdmrail to javafx.graphics, javafx.base;
    }
    Quand j'exécute le code rien ne s'affiche, pourtant quand je regarde les tâches en exécution elle est bien présente
    QU'est-ce que je fais mal ?

    Merci pour l'aide
    Louis

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 934
    Billets dans le blog
    54
    Par défaut
    J'ai peur que la réponse ici soit : Eclipse.

    Non, je déconne. Pour moi, ce code fonctionne bien sans soucis dans IDEA 2026 (Java27 et JavaFX 27) et NetBeans 25 (Java 25 et JavaFX 25) et Eclipse 2026-09 (JDK 25 et JavaFX 25)... a condition de rajouter la ligne exports qui manque dans le fichier module-info.java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    module CDMRAIL {
        requires javafx.graphics;
        requires javafx.controls;
     
        exports fr.free.cdmrail;
    }
    Sans cette ligne, les logs de demarrage auraient du afficher qq chose de similaire a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Exception in Application constructor
    Exception in thread "main" java.lang.reflect.InvocationTargetException
    	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:119)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:565)
    	at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1171)
    Caused by: java.lang.RuntimeException: Unable to construct Application instance: class test.start.CdmRail
    	at javafx.graphics@25/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:889)
    	at javafx.graphics@25/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$0(LauncherImpl.java:202)
    	at java.base/java.lang.Thread.run(Thread.java:1474)
    Caused by: java.lang.IllegalAccessException: class com.sun.javafx.application.LauncherImpl (in module javafx.graphics) cannot access class fr.free.cdmrail.CdmRail (in module test) because module CDMRAIL does not export fr.free.cdmrail to module javafx.graphics
    	at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:400)
    	at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:670)
    	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:492)
    	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
    	at javafx.graphics@25/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$3(LauncherImpl.java:801)
    	at javafx.graphics@25/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$0(PlatformImpl.java:449)
    	at javafx.graphics@25/com.sun.javafx.application.PlatformImpl.lambda$runLater$0(PlatformImpl.java:424)
    	at javafx.graphics@25/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    	at javafx.graphics@25/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    	at javafx.graphics@25/com.sun.glass.ui.win.WinApplication.lambda$runLoop$0(WinApplication.java:168)

    Pour les instructions généralement utilisables dans module-info.java :
    • requires - liste les modules dont l'application a besoin ce qui permet plus tard aussi de créer le graphe de dépendances et ainsi de produire un environnement plus léger quand on céer un paquet / installeur d'application. Certaines dépendances sont implicites et n'ont pas besoin d’être décrites (ex : javafx.base). Il existe aussi un nommage automatique des anciens JARs non-modulaire en fonction du nom du fichier (automodule) mais... ca marche pas toujours super bien.
    • exports - indique des packages qui sont ouvert au monde extérieur quand on utilise un système modulaire. C'est nécessaire, par exemple, quand on a une classe de lancement (avec un main()) ou des classes qui doivent être accessibles par d'autres modules (ex: quand on crée une lib). Attention, du coup ca rend visible toutes les classes publiques de ce package (donc penser a mettre les bons accesseurs dessus ou a les déplacer dans des sous-packages qui eux ne seront pas exportés).
    • opens - ouvre des packages a des modules spécifiques, entre autre pour pouvoir faire de l'injection ou de la reflection. Ici, je vois pas trop le besoin de faire un opens pour javafx.graphics et javafx.base, ca sert strictement a rien (pour cet exemple). Par contre plus tard tu pourrais être amené a faire un opens pour javafx.fxml par exemple, car le chargement de fichiers FXML demande effectivement a faire de la reflection et de l'injection sur la classe contrôleur.


    A noter que le besoin de créer une application modulaire (ou de déclarer les libs FX sur le MODULEPATH) pour faire du JavaFX a enfin été corrigée dans le JDK 27. C’était un soucis au niveau du code source du JDK qui avait conservé du code spécifique a JavaFX datant d'avant la separation. Désormais le JDK considere que JavaFX est une lib comme une autre qui peut aussi être utilisée sur le CLASSPATH pour une app no-modulaire.

    Alors, juste pour conserver une trace, voici ce que j'ai fait pour arriver a avoir un truc qui fonctionne dans Eclipse :
    • DL la dernière version de l'installeur d'Eclipse (pour Windows).
    • Installation de Eclipse, choix :
      • Eclipse IDE for Java Developer
      • JDK 25 (la version de l'OpenJDK qui était déjà préinstallée sur mon DD)
    • Lancement et configuration de Eclipse 2026-09
    • New -> Java Project
    • Creer le package qu'il faut pour les projet, placer les fichiers java idoines.
    • Propriétés du projet :
      • Verifier que le projet utilise bien le JDK 25
      • Java Build Path -> Libraries -> Modulepath -> Add Library... -> User Library -> Next > -> User Libraries....
      • -> New.., creer une lib nommée Javafx-25
      • -> Add External JARs.... sélectionner tous les fichiers JAR de JavaFX (qui sont situes dans le repertoire lib du SDK JavaFX)
      • Apply and Close
      • Finish
      • Apply and Close


    Rappel : JavaFX utilise des libs natives propres a l'OS sous-jacent (macOS dans ton cas, Windows pour moi), il n'est pas possible de simplement copier le JAR de l'application pour la transporter d'un systeme a un autre.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 74
    Par défaut
    Hello

    D'abord merci pour cette réponse exhaustive
    Avant de me plonger en détail sur les différents points, la dernière remarque m'interpelle
    J'ai choisi Java pour justement avoir une application qui fonctionne sur les trois architectures, ors tu dis que l'on ne peut pas transporter le jar tel quel !
    Tu peux développer ?
    D'avance merci

    Louis

  4. #4
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 74
    Par défaut
    Je viens de tester avec l'ajout de l'export mais toujours pas d'affichage

    Les bibliothèques sont bien présentes

    Nom : JavaFX-1.png
Affichages : 57
Taille : 159,8 Ko

    Louis

  5. #5
    doc
    doc est déconnecté
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 115
    Par défaut
    Est ce que les librairies sont bien présentes dans le modulepath et non dans le classpath?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 74
    Par défaut
    Hello

    Oui comme tu peux le constater

    Nom : JavaFX-2.png
Affichages : 54
Taille : 164,0 Ko

    Merci pour l'aide

    Louis

Discussions similaires

  1. Application Base de données avec JavaFX
    Par typhon_183 dans le forum JavaFX
    Réponses: 5
    Dernier message: 27/08/2012, 13h04
  2. Réponses: 0
    Dernier message: 22/06/2011, 14h53
  3. Manipulation des fichier avec JavaFX
    Par med-angelo dans le forum JavaFX
    Réponses: 4
    Dernier message: 26/10/2010, 22h09
  4. travailler avec javaFX et Swing GUI Forms en meme temps
    Par sahar_sr dans le forum NetBeans
    Réponses: 1
    Dernier message: 15/03/2010, 21h45
  5. Votre avis sur l'héritage multiple avec JavaFX
    Par guitariste dans le forum JavaFX
    Réponses: 12
    Dernier message: 01/09/2009, 23h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo