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

Entrée/Sortie Java Discussion :

[ClassLoader][Image] issue d'un jar en constante


Sujet :

Entrée/Sortie Java

  1. #1
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut [ClassLoader][Image] issue d'un jar en constante
    Bonjour,

    les images utilisées par une classe sont toujours les mêmes et je souhaite donc que cet attribut devienne une constante (final static) au lieu qu'il soit propre à chaque objet. Jusqu'à maintenant j'utilisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Attribut d'instance
    private ImageIcon ICON_FOLDER;
     
    // Initialisation dans le construcuteur
    this.ICON_FOLDER = new ImageIcon(this.getClass().getClassLoader().getResource("images/mini/folder.png"));
    Bien sûr il n'est pas possible de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private final static ImageIcon ICON_FOLDER = new ImageIcon(this.getClass().getClassLoader().getResource("images/mini/folder.png"));
    Comment optimiser cela ? Une solution de ce genre conviendrait-elle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private final static ImageIcon ICON_FOLDER = null;
     
    public MonConstructeur {
        // ...
        if (ICON_FOLDER == null) {
            ICON_FOLDER = this.getClass().getClassLoader().getResource("images/mini/folder.png");
        }
        // ...
    }
    Je dois reconnaître l'avantage d'utiliser this.getClass().getClassLoader().getResource(...), c'est qu'il fonctionne lors de l'utilisation d'un JAR ou non.


    Merci d'avance

  2. #2
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 68
    Points : 72
    Points
    72
    Par défaut Re: Image issue d'un jar en constante
    Citation Envoyé par julp
    Bien sûr il n'est pas possible de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private final static ImageIcon ICON_FOLDER = new ImageIcon(this.getClass().getClassLoader().getResource("images/mini/folder.png"));
    Dans cette expression, ce qui gêne, c'est le this, puisque tu es dans le contexte statique.

    Cela t'empêche d'obtenir le ClassLoader, puisque tu cherches celui de this, this qui n'existe pas. Il faut trouver le ClassLoader à partir de quelque chose qui existe dans un contexte statique.

    Tout dépend des ClassLoaders qui t'entourent. A priori, la meilleure base est ta classe elle même, et, si tu fais MaClasse.class.getClassLoader().get... tu devrais obtenir ce que tu cherches. Mais il existe de nombreuses autres possibilités.

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut Re: Image issue d'un jar en constante
    Citation Envoyé par tileffeleauzed
    MaClasse.class.getClassLoader().get...
    Je ne pense pas que je l'aurais trouvé tout seul. Merci beaucoup c'est tout à fait ce que je souhaitais et ça me permet d'optimiser un peu.


    Encore merci, Julp

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Ce sujet date mais j'aimerais y apporter ma maigre information... en effet, je travaille sous windows (et plus particulièrement sous eclipse mais ça ne doit pas avoir de rapport avec notre problème)

    Je me suis battu pendant 2 jours avec mon soucis qui consistait à ne pas arriver à charger mes ImageIcon static depuis le jar

    Voici ma classe entière du code final qui fonctionne (si ça peut servir à ceux qui sont encore en train d'apprendre):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    package gui;
     
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.net.URLClassLoader;
    import javax.swing.ImageIcon;
     
     
    public final class GuiImage {
    	private static ClassLoader classLoader=ImageIcon.class.getClassLoader();
    /*Attention,sous windows, si ça plante dans le jar alors que ça passe en exécution normale, 
     * c'est que vous n'avez pas respecté la casse -- Dafide --*/
     
    	public static ImageIcon[] AvatarVide = {
    			new ImageIcon(classLoader.getSystemResource("images/avatarvide.jpg")),
    		};
    		public static ImageIcon[] Decor = {
    			new ImageIcon(classLoader.getSystemResource("images/fond.png")),
    			new ImageIcon(classLoader.getSystemResource("images/fondlogin.jpg")),
    			new ImageIcon(classLoader.getSystemResource("images/cadrelistepartie.png")),
    			new ImageIcon(classLoader.getSystemResource("images/fondconfig.jpg")),
    			new ImageIcon(classLoader.getSystemResource("images/fondautrefenetre.png")),
    			new ImageIcon(classLoader.getSystemResource("images/fondprofil.jpg")),
    			new ImageIcon(classLoader.getSystemResource("images/fondserveur.jpg")),
    			new ImageIcon(classLoader.getSystemResource("images/fondcreateprofil.jpg")),
    		};
    ...
    public static BufferedImage toBufferedImage(Image image) {
    		    /** On test si l'image n'est pas déja une instance de BufferedImage */
    		if( image instanceof BufferedImage ) {
    		        /** cool, rien à faire */
    		        return( (BufferedImage)image );
    		} else {
    		        /** On s'assure que l'image est complètement chargée */
    		        image = new ImageIcon(image).getImage();
     
    		        /** On crée la nouvelle image */
    		            BufferedImage bufferedImage = new BufferedImage(
    		                                                  image.getWidth(null),
    		                                                  image.getHeight(null),
    		                                                  BufferedImage.TYPE_INT_RGB );
    		            Graphics g = bufferedImage.createGraphics();
    		            g.drawImage(image,0,0,null);
    		            g.dispose();
     
    		            return( bufferedImage );
    		    } 
    		}
    }
    Comme le dit le commentaire le problème est encore plus vicieux sous windows car je n'avais pas vu que j'avais un problème de casse sur un seul et unique fichier...
    Du coup, le jar plantait alors que l'exécution via eclipse fonctionnait à merveille... comme je n'ai rien récupéré en sortie d'exécution de jar (par manque de temps et de connaissance), j'ai essayé les autres méthodes du genre "jar:projet.jar!images/---.jpg"

    Les changements de path, etc, etc,...

    Mais au final c'est quand même beaucoup plus simple ainsi, il faut juste faire très attention à la casse...

    Merci pour ce topic et j'espère que cette nouvelle info pourra servir à d'autres.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/02/2007, 19h38
  2. [Conception] Récupérer une image issue d'un champ BLOB
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/11/2006, 10h02
  3. Comment mixer du html et une image issue de GD
    Par mego dans le forum Modules
    Réponses: 1
    Dernier message: 24/03/2006, 13h55
  4. Réponses: 6
    Dernier message: 29/07/2005, 11h12
  5. [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

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