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

AWT/Swing Java Discussion :

Probleme image et jar


Sujet :

AWT/Swing Java

  1. #1
    Invité
    Invité(e)
    Par défaut Probleme image et jar
    Bonjour,

    J'ai compilé un projet de simulation de course avec une image de fond et des coureurs.

    Dans mon IDE tout fonctionne bien mais si je lance le fichier jar en utilisant la ligne de commande indiquée par mon IDE, alors l'application se lance mais les images ne sont pas affichées.

    Je pense simplement qu'il ne trouve pas les images mais comment dois-je procèder pour qu'il les trouve ?

    Merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Tsumi
    Je pense simplement qu'il ne trouve pas les images mais comment dois-je procèder pour qu'il les trouve ?
    Où sont tes images et comment tu les charges ?

    a++

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Par défaut
    Je crois qu'il faut charger tes images avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClass().getClassLoader().getResource( monFichier )
    Et aussi bien sur lleur filer le chemin RELATIF par rapport a la racine de ton JAR

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je charge mes images par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fonddustade = ImageIO.read(new File("fonddustade.jpg"));
    Mes images sont à la racine du dossier de mon projet. C'est là que je dois les mettre si je veux pouvoir les charger par mon IDE.

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Par défaut
    Donc fonddustade est une BufferedImage ...

    Tu peux tenter un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fonddustade = new ImageIcon(this.getClass().getClassLoader().getRessource("fonddustade.jpg")).getImage();
    Sinon pour rester avec le ImageIO.read() je crois qu'il faut passer par un objet URL ... Mais pas sûr !

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Tsumi
    Je charge mes images par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fonddustade = ImageIO.read(new File("fonddustade.jpg"));
    Donc si les images ne sont pas affiché tu devrais avoir une exception on pourrait la voir !

    Citation Envoyé par Tsumi
    Mes images sont à la racine du dossier de mon projet. C'est là que je dois les mettre si je veux pouvoir les charger par mon IDE.
    Donc tes images doivent être dans le répertoire d'exécution de ton programme, puisque tu recherches des fichiers en relatif...

    Et cela ne peut évidement pas marcher si tes fichiers sont à l'intérieur du jar. Dans ce cas la meilleur solution est d'utiliser getResource() comme l'a indiqué JamesP et comme c'est indiqué dans la FAQ : Comment accéder à une image ?

    Citation Envoyé par JamesP
    Sinon pour rester avec le ImageIO.read() je crois qu'il faut passer par un objet URL ... Mais pas sûr !
    Non il y a bien plusieurs version, et je pense que c'est préférable d'utiliser ImageIO.read() que ImageIcon pour avoir une image

    a++

    a++

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Par défaut
    Yes bien joué, j'avais pas vu ca ... lol ...

    J'ai appris encore un truc aussi ... lol ^^

    Oui fait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.net.URL url = getClass().getResource("chemin/monImage");
    BufferedImage img = ImageIO.read(url);

  8. #8
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    javax.imageio.IIOException: can't read input file!
    at javax.imageIO.read(Unknow Source)
    .........
    Je ne mets pas tout (sauf si vous en avez besoin) car je ne peux pas faire de copier coller.

  9. #9
    Invité
    Invité(e)
    Par défaut
    J'ai donc à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BufferedImage fonddustade;
    fonddustade = ImageIO.read(new File("fonddustade.jpg"));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    java.net.URL url = getClass().getResource("chemin/fonddustade.jpg");
    BufferedImage fonddustade = ImageIO.read(url);
    Pour le chemin, je dois indiquer le chemin général commençant par C: ?

  10. #10
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Tsumi
    Pour le chemin, je dois indiquer le chemin général commençant par C: ?
    Non : c'est un chemin logique dans ton classpath et non pas sur le système de fichier !

    Où se trouve ton fichier "fonddustade.jpg" dans ton arborescence ?
    Que vaut ton URL ?
    Et pourquoi tronqué l'exception ? Ca peut toujours être utile et un copier/coller ce n'est pas la mort...


    C'est seulement avec un maximum d'info que la solution sera trouvé...

    a++

  11. #11
    Invité
    Invité(e)
    Par défaut
    Donc je termine avec l'erreur initiale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    C:\Documents and Settings\Administrateur>java -jar "C:\Program Files\netbeans-5.5\projects\MonStade\dist\Mon_Stade.jar"
    javax.imageio.IIOException: Can't read input file!
            at javax.imageio.ImageIO.read(Unknown Source)
            at vue.RepStade.<init>(RepStade.java:49)
            at vue.MaFenetre.<init>(MaFenetre.java:40)
            at monstade.Main.main(Main.java:18)
    Le fichier fonddustade.jpg se trouve :

    C:\Documents and Settings\Administrateur>java -jar "C:\Program Files\netbeans-5.5\projects\MonStade\fonddustade.jpg

    En fait, j'aimerais une solution pour modifier le code une fois pour toute. J'aurai donc accès aux images durant le développement et une fois l'application construite, le jar fonctionnera.

    Merci

  12. #12
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Les images se trouvent toujours dans le répertoire du projet ????
    Dans ce cas il faut bien utiliser File mais c'est la m***e car il faut utiliser des chemins complets dépendant du système !

    Si tu veux utiliser getResource() il faut que les fichiers se trouvent dans le classpath (dans les packages si tu préfères)

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClass().getResource("chemin/fonddustade.jpg");
    Le fichier doit se trouver dans le sous-package "chemin" par rapport au package de la classe courante.


    Le plus simple serait d'utiliser le classloader :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClass().getClassLoader().getResource("chemin/fonddustade.jpg");
    Le fichier se trouve dans le package "chemin".

    a++

  13. #13
    Invité
    Invité(e)
    Par défaut
    Merci pour ton aide.

    Je dois donc créer un package "MesImages" et mettre mon image "fonddustade.jpg" dedans.

    Ensuite, je dois faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     java.net.URL url = getClass().getClassLoader().getResource("MesImages/fonddustade.jpg");
    BufferedImage fonddustade = ImageIO.read(url);
    C'est bien çà ?

  14. #14
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Tsumi
    C'est bien çà ?
    Oui tout à fait.

    En developpement getReource() te retournera une URL du style : file://C:/Program Files/netbeans-5.5/projects/MonStade/MesImages/fonddustade.jpg

    Et lorsque tu exécuteras le jar tu auras un chemin du style: jar:file://C:/Program Files/netbeans-5.5/projects/MonStade/dist/Mon_Stade.jar!/MesImages/fonddustade.jpg

    Mais dans les deux cas tu pourras lire ton image

    a++

    PS : Les packages ne prennent pas de majuscule
    PS2 : Attention aux différences minuscule/majuscule, qui sont ignoré sous Windows mais pas une fois que l'image est dans le Jar !

  15. #15
    Invité
    Invité(e)
    Par défaut
    Tout fonctionne.

    Merci beaucoup pour toute l'aide.

    Tsumi

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

Discussions similaires

  1. probleme image en mysql
    Par hiagro dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 10/06/2006, 05h41
  2. [débutant] probleme images
    Par Anthony17 dans le forum Delphi
    Réponses: 7
    Dernier message: 15/05/2006, 16h42
  3. [CSS] Problème image "fixed"
    Par mikedimoi dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 09/05/2006, 17h30
  4. [ XSL : FO] probleme images identique!!!
    Par chouchou93 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/02/2006, 15h38
  5. [Applet][JTextPane][HTML]Accès a une image du JAR
    Par SamDaKap dans le forum Applets
    Réponses: 4
    Dernier message: 10/08/2004, 16h17

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