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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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?

+ 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