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

Langage Java Discussion :

Indiquer un chemin dans un jar


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Points : 110
    Points
    110
    Par défaut Indiquer un chemin dans un jar
    Voila mon problème. J'ai réalisé un programme qui nécéssite des bibliothèque et des images. J'ai bien décompressé mes bibliothèque pour les integrer au jar et ca fonctionne. Par contre, pas moyen d'indiquer que mes images sont dans le jar, j'ai toujours besoin d'avoir mon dossier d'image en dehors pour pouvoir y acceder. Est ce que quelqu'un a une idée de comment faire?

    ps:
    je declare mes image de la manières suivante

    private static String .\images\bandeau\masociete.png;

  2. #2
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Points : 110
    Points
    110
    Par défaut
    ooops, j'ai oublié les guillement, mais je pense que vous avez compris que cétait:

    private static String ".\\images\\bandeau\\masociete.png";

    merci

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    normalement tu peux avoir le chemin de ton application avec la methode getLocale, je pense que ca peut te donner une idee de la structure du chemin..

    C est quelquechose comme jar:file:/C:/.../.../...jar!/

  4. #4
    Membre confirmé Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Points : 510
    Points
    510

  5. #5
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Points : 110
    Points
    110
    Par défaut
    ok, je vais essayer merci, je vous tient au courant.

  6. #6
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Points : 110
    Points
    110
    Par défaut
    Désolé, j'ai pas réussis, mais je ne dis pas que ce que vous dite est faux
    Lorsque je fais comme dans le tuto:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClass().getRessource("/bandeau.png");
    J'ai une erreur de compil, il ne veut pas appliquer la méthode getRessource

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 62
    Points : 71
    Points
    71
    Par défaut
    Essaie ça : getClass().getClassLoader().getResource("monImage")

  8. #8
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Points : 110
    Points
    110
    Par défaut
    Ok, je vais essayer. Je vous dirais ca demain parce que la mon patron m'a donné du boulot

  9. #9
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Points : 110
    Points
    110
    Par défaut
    En gros j'avais la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monLabel.setIcon(New ImageIcon(urlMonImage));
    Ca ne marchait pas dans le jar, j'ai donc essayé comme vous me l'avez conseillé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monLabel.setIcon(new ImageIcon(getClass().getClassLoader().getRessource("/monimage.png");
    Ca marche toujours pas (ca marche meme plus en dehors du jar, mdr)
    Pour info, voici mon arborescence

    MonProjet
    fenetre.class
    /images
    /bandeau
    monimage.png
    Bien sur, c'est ma classe fenetre qui utilise l'image
    Please help

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 62
    Points : 71
    Points
    71
    Par défaut
    normal que ca ne foncitonne plus, tu n'as pas indiqué le repertoire dans lequel se trouvait ton image ^^.

    J'ai pas bien comprit ton diagramme, donc :
    - Soit ton images est dans /bandeau/monimage.png, et là tu doit mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monLabel.setIcon(new ImageIcon(getClass().getClassLoader().getRessource("bandeau\monimage.png")));
    - Soit ton image est à la racine, et donc tu dois mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monLabel.setIcon(new ImageIcon(getClass().getClassLoader().getRessource("monimage.png")));
    En tout cas, il faut mettre le chemin relatif, A PARTIR DU FICHIER QUI APPELLE L'IMAGE.
    PS : n'oublies pas les )) à la fin

  11. #11
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Points : 110
    Points
    110
    Par défaut
    ok j'essais, merci

  12. #12
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Points : 110
    Points
    110
    Par défaut
    Cool, ca marche, merci beaucoup

  13. #13
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Points : 110
    Points
    110
    Par défaut
    Euh non, en fait ca marche bien jusque lorsque je met tout dans un jar. Sniff.
    Il veut toujours pas aller me les chercher directement dans le jar, il veut que me les prendre si elle sont dans le meme repertoire que mon jar.
    Tant pis, je crois que je vais abandonner.

  14. #14
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par Aldebaranl2
    En tout cas, il faut mettre le chemin relatif, A PARTIR DU FICHIER QUI APPELLE L'IMAGE.
    bien sur que non....
    getResource travaille avec des regles de reecriture d'URL.
    dans un jar si ta classe est fr.supertruc.utils.Maclasse si tu mets ton image dans le pseudo repertoire du jar /fr/supertruc/utils/config
    l'URL relative est "config/monimage"
    si tu mets ton image dans le pseudo-repertoire /media
    l'URL absolue est "/media/monimage"
    Ceci marche ou que tu mettes ton image (jar, systeme de fichier, etc...)
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  15. #15
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Points : 110
    Points
    110
    Par défaut
    Ok prof, je vais essayer (mais je crois que je l'ai déja fait, on va voir sniff)
    Je vous dit ça plus tard parce que la g du taf

  16. #16
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Points : 110
    Points
    110
    Par défaut
    Impec, ça fonctionne. Juste une dernière question pour ma culture:
    quand je met
    getResoure("/images/bandeau/monImage.png");

    Et que je test (soit pas encore dans un jar) ca bug (nullpointerException, si je veut que ca fonction, j'enleve le premier '/'). Est-ce normal?

  17. #17
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Cela dépend de quel méthode getResource() tu utilises...

    Si tu utilises getResource() de la classe ClassLoader, ce dernier attend le chemin complet vers la resources dans le CLASSPATH, c'est à dire dans ton cas : images/bandeau/monImage.png.
    Avec ClassLoader.getResource() on ne doit jamais utiliser de / au début du nom de la resource.

    Si tu utilises getResource() de la classe Class, ce dernier attend un chemin relatif par rapport au package de la classe qu'il représente. Ainsi il concatène automatiquemement le nom du package avant le nom de la resource que tu lui passes. Ainsi le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String.class.getResource("nom_de_la_resource");
    est équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClassLoader().getResource("java/lang/nom_de_la_resource");
    Puisque la classe String fait partie du package java.lang...

    Toutefois, il est également possible d'utiliser un chemin complet avec Class.getResource() en utilisant le caractère / comme premier caractère, et dans ce cas le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String.class.getResource("/nom_de_la_resource");
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClassLoader().getResource("nom_de_la_resource");
    a++

  18. #18
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Points : 110
    Points
    110
    Par défaut
    Ouah impec ton explication. Merci beaucoup, c'est clair comme de l'eau maintenant.

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

Discussions similaires

  1. Le chemin d'accès spécifié est introuvable (dans un jar)
    Par Jacobian dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 17/12/2008, 11h26
  2. Enregistrer un classeur dans un répertoire sans indiquer le chemin
    Par Maluje dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/08/2008, 18h15
  3. Indiquer chemin dans le site Ex: forum développeurs > webmasters > ..
    Par Greatz dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/07/2008, 11h11
  4. [DOM4J] Quel chemin pour un document XML compris dans un JAR
    Par vain_mich dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 19/06/2007, 17h59
  5. [JasperReport] chemin du .jasper dans un jar
    Par JuTs dans le forum Documents
    Réponses: 2
    Dernier message: 14/08/2006, 23h18

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