Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les exécutable .exe et .jar ne se lance plus

Problème d'images

Sujet résolu
    15 septembre 2020 à 12:50:39

    Bonjour,

    J'ai vraiment besoin de votre aide pour résoudre ce problème s'il existe une solution. J'ai énormément cherché comme faire mais rien.

    Je programme une application avec javaFx (fxml comme vues) sur Apache NetBean, avec Maven.

    Lorsque j'utilise un chemin tel que celui-ci : /C:/User/Jojo/Drive/Documents/NetBeansProjects/Projet/src/main/resources/images/cabinet.PNG, le programme fonctionne correctement depuis l'IDE et lorsque je lance les exécutables, tout fonctionne.

    Mais lorsque je veux l'utiliser dans un autre ordinateur, les images ne s'affiche pas; et lorsque je change le chemin de l'image à utiliser en ceci :  src/main/resources/images/cabinet.PNG, dans ce cas, les exécutables ne se lancent même pas.

    Pourriez-vous s'il vous plaît m'aider à trouver une solution pour pouvoir lancer l'application depuis n'importe quel machine avec l'affichage des image ?

    Si la solution a déjà été trouvée, veuillez s'il vous me l'indiquez ?

    -
    Edité par JoëlLemfileNtumba 15 septembre 2020 à 12:52:11

    • Partager sur Facebook
    • Partager sur Twitter
    LNJDJW.ORG
      15 septembre 2020 à 18:49:08

      Il faut charger les images avec le classloader
      • Partager sur Facebook
      • Partager sur Twitter
        16 septembre 2020 à 10:20:07

        Merci pour ta réponse, j'ai essayé de le faire comme suite 

        J'ai même mis le chemin absolu pour voir.

        Lorsque je lance le projet depuis l'IDE, ça fonctionne, mais lorsque je génère les exécutables et que je les lance, rien ne se passe, rien n'apparaît :(

        -
        Edité par JoëlLemfileNtumba 16 septembre 2020 à 10:20:58

        • Partager sur Facebook
        • Partager sur Twitter
        LNJDJW.ORG
          16 septembre 2020 à 12:02:26

          vérifie que:

          1) l'image est bien dans le jar

          2) que f n'est pas null (null = image pas trouvée)

          Si null, retire src/main/resources (garde un / devant)

          • Partager sur Facebook
          • Partager sur Twitter
            16 septembre 2020 à 13:24:13

            L'image est bien dans le jar.

            Et aucune variable n'est null, puisque, lancé depuis l'IDE, ça fonctionne, mais ce sont les exécutables qui ne donnent rien du tout. Lorsqu'il y a un '/' devant, il est null :(.

            • Partager sur Facebook
            • Partager sur Twitter
            LNJDJW.ORG
              17 septembre 2020 à 6:59:00

              Ton projet est buildé avec Maven ?

              Dans le jar/exe généré le chemin src/main/resources/ n'existe plus, le contenu de ce chemin se retrouve à la racine de ton classpath.

              Il faut donc continuer à charger les images par le classloader en cherchant dans le classpath, mais avec comme chemin ./

              Tu peux tester directement dans ton IDE, car lors de la compilation il va émuler ce comportement. Et pour vérifier ce qu'il se passe (si tu utilises Maven) tu peux aller voir ce qui est créé dans target/classes, si tu n'utilises pas Maven, ton IDE doit avoir un répertoire build quelque part. Ainsi tu verras exactement où se trouvent tes images, et donc adapter ton chemin

              • Partager sur Facebook
              • Partager sur Twitter
                17 septembre 2020 à 15:36:17

                Merci pour ta réponse.

                Oui c'est Maven.

                J'ai appliqué ton conseil en faisant ceci : 

                Sur l'IDE NetBean ça fonctionne sans problème, mais c'est surtout les exécutables jar et exe qui ne se lance même pas :(

                C'est peut-être moi qui aie mal chargé l'image quelque chose ?

                Il y a bien aussi les images dans target/classes

                -
                Edité par JoëlLemfileNtumba 17 septembre 2020 à 15:40:12

                • Partager sur Facebook
                • Partager sur Twitter
                LNJDJW.ORG
                  17 septembre 2020 à 18:44:19

                  Dans le target classes, les images sont bien dans le sous-répertoire images j'imagine ?

                  As-tu vérifié dans le jar généré que les images sont bien présentes dans ./images ?

                  Sinon afin de voir ou sont cherchées les images, tu peux afficher le résultat de this.getClass().getClassLoader().getResource("./images/cabinet.png") qui retourne une URL

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 septembre 2020 à 14:28:25

                    Oui, les images sont bien dans le sous-répertoire 'images'.

                    Dans le jar, les image y sont bien, voici une image :

                    Et lorsque j'affiche le chemin comme tu me l'as montré, ça donne : 

                    file:/C:/User/jojo/OneDrive/Documents/NetBeansProjects/ACE/target/classes/images/cabinet.png

                    Mais lorsque je fais avec this.getClass().getClassLoader().getResourceAsStream("./images/cabinet.png"), ça me donne ça : java.io.BufferedInputStream@5c32e3b7.  C'est normal ??

                    • Partager sur Facebook
                    • Partager sur Twitter
                    LNJDJW.ORG
                      21 septembre 2020 à 20:40:38

                      Oui, car ClassLoader.getResourceAsStream(String) retourne un InputStream.

                      Par contre en mode jar, il faut afficher le résultat this.getClass().getClassLoader().getResource("./images/cabinet.png")  qui retourne une URL, comme celle que tu as obtenue lors de l'exécution dans ton IDE. Cela te permettra de voir si il cherche bien dans le jar, et où   

                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 septembre 2020 à 9:51:48

                        OK !

                        lorsque je fait avec this.getClass().getClassLoader().getResource("./images/cabinet.png"), il me retourne ça : file:/C:/User/jojo/OneDrive/Documents/NetBeansProjects/ACE/target/classes/images/cabinet.png

                        Est-ce normal ?

                        • Partager sur Facebook
                        • Partager sur Twitter
                        LNJDJW.ORG
                          22 septembre 2020 à 14:03:25

                          en fait, tout le problème vient du chemin (j'ai fait le test), il faut remplacer "./images/cabinet.png" par "images/cabinet.png"

                          Voilà le code de mon test, au cas où (testé en IDE et Jar) 

                          public class LoadResource {
                              public static void main(String[] args) {
                                  new LoadResource()
                                          .displayURL("./images/sample.txt")
                                          .displayURL("/images/sample.txt")
                                          .displayURL("images/sample.txt");
                              }
                          
                              public LoadResource displayURL(String path) {
                                  System.out.println("Path(" + path + "): " + getClass().getClassLoader().getResource(path));
                                  return this;
                              }
                          }
                          



                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 septembre 2020 à 14:17:54

                            J'avais déjà aussi fait le test avec, et le chemin affiché est le même: file:/C:/User/jojo/OneDrive/Documents/NetBeansProjects/ACE/target/classes/images/cabinet.png

                            Dans l'IDE, les images s'affichent correctement, mais l'exécutable ne se lance toujours pas :(

                            • Partager sur Facebook
                            • Partager sur Twitter
                            LNJDJW.ORG
                              24 septembre 2020 à 9:32:15

                              Vu que tu build avec Maven, il faut que tu précises au plugin maven qui génère le jar quelle est ta main class.

                              Pour cela il faut ajouter la configuration du maven archiver plugin: http://maven.apache.org/shared/maven-archiver/examples/classpath.html#Make

                              Il te sera alors possible de double-cliquer sur le jar pour lancer ton application (à condition que celle-ci n'est pas de dépendances externes)

                              • Partager sur Facebook
                              • Partager sur Twitter
                                28 septembre 2020 à 16:46:52

                                Le mainClass est bien rempli dans le pom.xml avec la bonne classe.

                                Que veux-tu dire par dépendances externes ?

                                • Partager sur Facebook
                                • Partager sur Twitter
                                LNJDJW.ORG
                                  29 septembre 2020 à 6:57:30

                                  Si ton code utilises d'autres librairies (slf4j, ...) il faut que celles-ci soient dans le classpath
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    5 octobre 2020 à 14:30:53

                                    Bonjour,

                                    Finalement j'ai trouvé une autre solution pour configurer l'utilisation des images dans le logiciel.

                                    Merci en tout cas pour votre aide et vos conseils !

                                    à bientôt !

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    LNJDJW.ORG

                                    Les exécutable .exe et .jar ne se lance plus

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown