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 :

loader une image


Sujet :

Langage Java

  1. #1
    Membre éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Par défaut loader une image
    Salut à tous,

    voici ce que j'ai trouvé sur la FAQ: ici

    Quelle différence font ils entre jar et application?

    En fait, je veux récupérer des images qui se trouveront dans mon jar par la suite.
    Je travaille avec Eclipse.

    Je souhaite que mon load d'image fonctionne aussi bien dans mon projet Eclipse que dans mon jar.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Toolkit.getDefaultToolkit().getImage("img.jpg"))
    fonctionne dans les 2 cas.

    Je ne comprends donc pas la FAQ lorsqu'elle parle de ClassLoader

    Merci de m'éclairer sur ce point que je n'ai pas compris!!!

  2. #2
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Of à mon avis il n'y a rien à comprendre ; Le ClassLoader fait partie de ces choses nécessaires qui ne servent que dans 0,1% des cas, mais ça fait toujours bien d'en parler.

    Je m'étonne d'une chose dans ce que tu dis : es-tu vraiment sûr que getDefaultToolkit().getImage("img.jpg") te ramène l'image dans ton jar ?? Pour lui, le jar, je m'aurais attendu à ce que tu fasses getDefaultToolkit.getImage((getClass().getResource("chemin/img.jpg"))), comme le suggère la FAQ (que tu dis ne pas avoir compris, donc tout est normal)

    L'accés aux ressources dans les jar semble poser d'insondables problèmes...

    Peut être une autre façon d'expliquer les choses :

    - l'accés à un composant du programme (composant classiquement un jar, mais en général on ne le sait pas) se fait en standard par un ClassLoader
    - donc pour une image composant un programme il faut un ClassLoader
    - Ces ClassLoader s'organisent en particulier selon les classes, d'où l'expression getClass().getResource(...).

    Je sais pas si c'est mieux ?...

    A+.

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Le classLoader intervient à partir du moment ou tu as une organisation sépraée pour les images (dans ton cas elles sont au même niveau de que tes classes, mais ça doit être un tant soit peu le foutoir).
    Il permet de charger les images à partir de l'arborescence de ton jar (enfin depuis l'endroit où est lancé ton appli, dans le cadre d'un jar sa racine)
    grosso modo si tu as l'orborescence suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /  //racine
    |
    |_ lib
    |_ img
    |_ package 1
    avec img contenant tes imgaes
    En utilisant le ClassLoader tu accéderas à tes images comme ceci : /img/img.jpg

    ça permet de créer en fait un système un référentiel limité au jar.


    A part ça, mieux vaut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ImageIO.read(...);
    que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Toolkit.getDefaultToolkit().getImage(...);
    celà permet d'^tre sur que l'image est correctement et entièrement chargée

  4. #4
    Membre éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Par défaut
    Voici ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    URL url = getClass().getResource("img/obiou2.jpg");
    ImageIcon image;
    if(url == null){
    	System.out.println("URL = null => I am not in jar file");
    	try {
            	ImageIO.read(new File("img/obiou2.jpg"));
            } catch (IOException e) {
            	e.printStackTrace();
    	}
    }else {
    	System.out.println("URL =! null => I am in the jar file");
    	image = new ImageIcon(url);
    }
    Qu'en pensez vous? C'est propre?

  5. #5
    Membre Expert
    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 : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par menuge
    Qu'en pensez vous? C'est propre?
    non
    tu imagines que tu ne trouve pas ta ressource parcequ'elle n'est pas dans le jar et donc qu'elle doit être dans le système de fichier .... pourquoi?
    typiquement si le ClassLoader opére sur le réseau ta conclusion n'est pas correcte.
    avec une écriture propre de la ressoure ça doit marcher! que ça soit dans un jar ou non!

  6. #6
    Membre éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Par défaut
    donc pour toi, que je sois dans mon projet Eclipse ou dans mon jar :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = getClass().getResource("img/obiou2.jpg");
    doit fonctionner...????

    Dans ce cas, je ne comprends pas pourquoi dans mon projet, il me renvoie une url null.

    Mon projet a pourtant bien un répertoire img qui contient l'image obiou2.jpg

    Qu'est qui peut clocher à ton avis?

  7. #7
    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 menuge
    Mon projet a pourtant bien un répertoire img qui contient l'image obiou2.jpg

    Qu'est qui peut clocher à ton avis?
    Surement parce que cela ne fait pas partie du CLASSPATH.

    Dans eclipse tu as deux cas, soit la racine du projet est considéré comme le répertoire contenant les sources, et dans ce cas la racine du projet correspond également à la racine du CLASSPATH, et là cela devrait marcher.

    Soit tu as un répertoire séparé pour les sources et le binaires, et dans ce cas chaque répertoire "source" correspond à la racine du classpath. Ainsi tu peux avoir plusieurs "racines" en utilisant la commande "Build Path->Use as Source Folder". Les sous-répertoires seront alors représenté en tant que packages...

    a++

  8. #8
    Membre éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Par défaut
    OK!!!!!!

    Je viens de comprendre!!!!!!

    Donc en fait il suffit dans mon cas, d'ajouter le répertoire img dans les build-path properties de mon projet et donc mon jar, il faut que je modifie le Class-Path dans le MANIFEST!!!??? C'est bien ça?

  9. #9
    Membre éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Par défaut
    Et en plus, je n'ai plus qu'à faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = getClass().getResource("obiou2.jpg");
    sans le img

  10. #10
    Membre éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Par défaut
    OK, merci beaucoup pour votre aide, ça fonctionne du tonnerrre!!!

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 38
    Par défaut
    Penses au Tag Résolu

  12. #12
    Membre éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Par défaut
    Il est mis depuis tout à l'heure ;-)

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

Discussions similaires

  1. [CS4] Loader une image via flashvars
    Par nanou777 dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 14/08/2011, 17h19
  2. Loader une image a partir d'une URL
    Par Jinx_ dans le forum Langage
    Réponses: 2
    Dernier message: 14/08/2009, 08h49
  3. Réponses: 2
    Dernier message: 09/02/2008, 01h23
  4. Changer la taille d'une image chargée avec Loader
    Par DeezerD dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 29/01/2008, 17h55
  5. largeur d'une image loader
    Par chernisoft dans le forum Flash
    Réponses: 6
    Dernier message: 27/05/2006, 16h50

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