JAVAFX - inclusion de fichier FXML dans un autre fichier FXML
Le code java qui charge les fichiers fxml est le suivant :
Code:
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:
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:
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:
<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 ?