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

Java Discussion :

[JAR] Accéder à une resource contenue dans un jar


Sujet :

Java

  1. #1
    Membre actif
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    583
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 583
    Points : 265
    Points
    265
    Par défaut [JAR] Accéder à une resource contenue dans un jar
    Bonjour tous, ben ma question est dans le titre, je qu'il y a un exemple dans la faq et je m'en suis inspiré.
    Je voudrais donc charger une image qui est contenu dans un jar je fai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image icone = Toolkit.getDefaultToolkit().getImage( getClass().getResource("./Datas/email.png") );
    seulement ca me claque une excetpion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Uncaught error fetching image:
    java.lang.NullPointerException
    	at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:97)
    	at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:106)
    	at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:240)
    	at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
    	at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)
    Getclass() me renvoit null en somme. Je pense que c'est du au faite que mon appli utilise plusieurs jar,(enfin je suis pas spécialiste la dessus) et qu'elle se plante. j'ai chercher si il y avai un moyen de spécifier dans qu'elle jar aller chercher l'image mais sans succès.
    Quelqu'un a t'il une solution?

    Sinon est ce possible de compiler une image directement dans le .class? Comme on peut le faire dans un executable fait en c++ par exemple?

    merci

  2. #2
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Points : 145
    Points
    145
    Par défaut
    et pourquoi ne pqs mettre tes imqges dans un repertoire dédié?

  3. #3
    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 Re: Acceder a une resource contenu dans un jar
    Salut,

    Citation Envoyé par Blo0d4x3
    Getclass() me renvoit null en somme.
    C'est plutôt getRessource() puisque getClass() ne peut pas renvoyer null...


    Citation Envoyé par Blo0d4x3
    Je pense que c'est du au faite que mon appli utilise plusieurs jar,(enfin je suis pas spécialiste la dessus) et qu'elle se plante. j'ai chercher si il y avai un moyen de spécifier dans qu'elle jar aller chercher l'image mais sans succès.
    Non les différents jar sont bien géré, le problème vient surement du fait que tu ne spécifie pas le bon chemin...


    Je m'explique : Le chemin des ressources est un chemin logique dans le CLASSPATH (c'est à dire des répertoires ou des Jar).

    Deux cas de figure se présente :
    • Tu passes un chemin qui commence par / : le chemin est utilisé tels quel.

      Exemple : getResource("/Datas/email.png") recherchera le fichier correspondant dans les divers éléments de ton CLASSPATH (dans l'ordre de déclaration) :

      [list:26340c8f98]
    • Si c'est un répertoire, (par exemple C:\classes) il recherchera le fichier dans l'arborescence correspondante (C:\classes\Datas\email.png).
    • Si c'est un Jar, il recherchera le fichier dans l'arborescence correspondante à l'intérieur du jar (Datas\email.png dans le jar).

    [*] Mais si tu lui passes un chemin qui ne commence pas par /, il considèrera que le chemin est relatif à la classe de getClass(). Ainsi si ta classe appartient au package com.masociete.monpackage, getResource("./Datas/email.png") recherchera en réalité le fichier suivant : /com/masociete/monpackage/./Datas/email.png (avec la même règle que ci dessus)...[/list:u:26340c8f98]

    Donc à toi d'adapter ton chemin selon tes besoins...

    a++

  4. #4
    Membre actif
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    583
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 583
    Points : 265
    Points
    265
    Par défaut
    alors, alors, j'ai mis ceci dans la classe principle contenant le main dans mon jar exécutable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image icone = Toolkit.getDefaultToolkit().getImage( getClass().getResource("Datas/email.png") );
    la ok ca marche nikel il va bien me chercher l'image dans le bon jar.

    Mais, car il y a un mais lol. J'ai une autre classe contenus dans un autre jar qui lui n'est pas executable mais dont mon prog en as besoin, qui lui contient aussi des image a charger, j'ai fait donc pareil:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _img = Toolkit.getDefaultToolkit().getImage(getClass().getResource(path));
    ou path ="Images/exclamation-icon.gif"

    Et la ca se casse la gueule. J'ai fait le test en mettant les images dont mon prog avait besoin dans le jar executable et ca marchait!

    Donc ma classe dans le seconde jar va chercher ses images dans le jar principal, donc pas dans le bon jar.
    Je cherche comment faire pour qu'il aille chercher ses image dans le bon jar...

    merci quand même adiGuba.

  5. #5
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Comme t'as très bien explique adiGuba, il faut utiliser une chemin absolu (qui commence par /) pour accèder à ta ressource "/Images/exclamation-icon.gif" (Es-tu sûr du i majuscule d'images?).

    En plus, il faut que ton jar non éxecutable soit dans le CLASSPATH sinon la JVM ne peut pas trouver ta ressource.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Resource.jar
        /com
            /developpez
                /resources
                    /images
                         exclamationIcon.gif
                         interrogationIcon.gif
     
    Programme.jar
        /com
           /developpez
               /programme
                  Test.class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    package com.developpez.programme;
     
    public class Test() {
     
        public void main(String[] args) {
               String path = "/com/developpez/resources/images/exclamationIcon.gif";
             _img = Toolkit.getDefaultToolkit().getImage(getClass().getResource(path)); 
        }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java -classpath .\programme.jar;.\ressource.jar com.developpez.programme.Test
    Je n'ai pas testé ce code mais l'esprit y est.

    Bonne journée
    Jowo

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/11/2006, 11h12
  2. Appel d'une jsp contenue dans un JAR
    Par shaun_the_sheep dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 22/09/2006, 09h37
  3. Réponses: 6
    Dernier message: 29/07/2005, 11h12
  4. [JAR] instancier une Image contenue dans un jar
    Par celine31 dans le forum Général Java
    Réponses: 3
    Dernier message: 03/04/2005, 15h55
  5. [Jar][Classpath]Pb chargement resource classpath dans un jar
    Par Pill_S dans le forum Général Java
    Réponses: 20
    Dernier message: 01/10/2004, 20h12

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