Le code java qui charge les fichiers fxml est le suivant :

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
26
27
28
29
30
31
32
        // Déclaration des variables locales
        FXMLLoader fxmlLoader = new FXMLLoader();
        Node nodeRoot = null;
 
        try {
 
            // Utiliser un chemin de ressource complet
            String cheminFichierFXML = "resources/fxml/" + nomFichierFXML;
 
            // Charger le fichier FXML en tant que ressource
            URL urlFichierFXML = JfxOutils.class.getClassLoader().getResource(cheminFichierFXML);
 
            if (urlFichierFXML == null) {
                throw new IllegalStateException("Fichier FXML non trouvé : " + cheminFichierFXML);
            }
 
 
            // Définir l'emplacement de la ressource - Configurer le FXMLLoader avec l'URL de la ressource
            fxmlLoader.setLocation(urlFichierFXML);
 
            System.out.println("PHS, Chargement de : " + nomFichierFXML);
 
            // Charger le FXML à partir du flux
            // nodeRoot = fxmlLoader.load(inputstream);
            nodeRoot = fxmlLoader.load();
 
            System.out.println("PHS, Chargement réussi de : " + nomFichierFXML);
 
 
        } catch (IOException e) {
            throw new IllegalStateException("Impossible de charger le fichier FXML : "+nomFichierFXML, e);
        }
L'arborescence dans quartztouchoutils.jar, pour ce qui nous concerne est :

quartztouchoutils.jar\resources\fxml\

Ce répertoire contient lui même les fichiers :
importationdonneesdunsiteqt.fxml
et
quartztouchoutils.fxml

Dans le pom.xml de mon projet java quartztouchoutils, j'ai bien :
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
         <resources>
            <resource>
                <directory>src/main/resources</directory>
                <!-- Les ressources sont copiés dans le repertoire resources du JAR -->
                <targetPath>resources</targetPath>
                <includes>
                    <!-- Inclut tous les fichiers et répertoires -->
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>

Je lance mon application de la façon suivante, dans un invite de commande DOS :
java -jar quartztouchoutils.jar


J'ai rajouté des traces dans mon code java.

J'ai la log suivante, après execussion du jar :


Lors du chargement du 1er fichier xml :
"
PHS, Chargement de : quartztouchoutils.fxml
PHS, Chargement réussi de : quartztouchoutils.fxml
"

Il n'y a pas de problème.

C'est au moment de la recherche de chargement du 2éme fichier xml :

"
PHS, Chargement de : importationdonneesdunsiteqt.fxml
"

Que l'erreur se produit :
Code console : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Caused by: java.lang.IllegalStateException: Impossible de charger le fichier FXML : importationdonneesdunsiteqt.fxml
        at com.{mon_entreprise}.quartztouchoutils.outils.JfxOutils.chargementFichierFxml(JfxOutils.java:51)
        at com.{mon_entreprise}.quartztouchoutils.interfacegraphique.ecrans.controller.QuartztouchOutilsController.allerSurImportationDonneesDunSiteQT(QuartztouchOutilsController.java:41)
        ... 53 more
Caused by: javafx.fxml.LoadException:
file:/C:/Quartztouch_Outils/QuartztouchOutils_java/quartztouchoutils.jar!/resources/fxml/importationdonneesdunsiteqt.fxml:12

Dans mon fichier importationdonneesdunsiteqt.fxml, j'ai la clause :

Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
<fx:include source="quartztouchoutils.fxml"  />

Le problème se situe dans le fichier importationdonneesdunsiteqt.fxml qui inclus le fichier quartztouchoutils.fxml via la balise <fx:include source="quartztouchoutils.fxml" />, il n'arrive pas à cahrger ce 2éme fichier : quartztouchoutils.fxml

Dans Intellij, ça fonctionne très bien, c'est lors de l'execussion en mode ligne de commande avec le fichier quartztouchoutils.jar que le problème se pose.

Auriez vous une solution à me proposer ?