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 :

JAVAFX - inclusion de fichier FXML dans un autre fichier FXML


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur Développement/Intégration
    Inscrit en
    Mai 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Développement/Intégration
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2012
    Messages : 32
    Par défaut JAVAFX - inclusion de fichier FXML dans un autre fichier FXML
    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 ?

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur Développement/Intégration
    Inscrit en
    Mai 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Développement/Intégration
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2012
    Messages : 32
    Par défaut Résolution
    Bonjour, donc au final, le problème ne venait pas comme je le pensais au départ de l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <fx:include source="quartztouchoutils.fxml" />
    , se trouvant dans le fichier importationdonneesdunsiteqt.fxml,

    mais de l'instruction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Path path = Paths.get(CONFIGURATION_FILE);
    non reconnu lors de l'execution de l'application sous forme de jar : quartztouchoutils.jar

    qui se trouvant dans le constructeur d'une classe.

    Il faut utiliser à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     InputStream inputStream = ProprietesOutils.class.getClassLoader().getResourceAsStream(CONFIGURATION_FILE);
    Le constructeur corrigée 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
     
        public ProprietesOutils() {
     
     
            // Chargement du fichier de configuration, s'il existe
            // Il faut passer IMPERATIVEMENT par le inputStream, car le Path path ne fonctionnera pas dans le cas
            // où l'application est executée à partir du quartztouchoutils.jar
            InputStream inputStream = ProprietesOutils.class.getClassLoader().getResourceAsStream(CONFIGURATION_FILE);
     
            if (inputStream == null) {
                logger.warn("le fichier de configuration : " + CONFIGURATION_FILE + " n'existe pas, il va être crée.");
     
                // S'il n'existe pas, il faut créer le fichier de configuration
                creationDuFichierDeConfiguration();
            }
        }
    Le constructeur ProprietesOutils était appelé par le controller ImportationDonneesDUnSiteQTController.java pour le fichier importationdonneesdunsiteqt.fxml,
    d'où le problème que j'ai rencontré.

    C'est maintenant résolu.

    Bien à vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] Inclusion d'un code dans un autre
    Par leirisset dans le forum Langage
    Réponses: 0
    Dernier message: 26/12/2010, 19h38
  2. Inclusion d'un properties dans un autre
    Par burhud dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 02/06/2008, 10h01
  3. Tester l'inclusion d'une chaine dans une autre
    Par Anubis dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2007, 14h55
  4. Réponses: 2
    Dernier message: 29/06/2007, 09h37
  5. [XSD] Inclusion d'un schéma dans un autre
    Par ploxien dans le forum Valider
    Réponses: 1
    Dernier message: 20/09/2006, 18h24

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