2010-01-05 6 views
2

J'essaie de charger un ImageIcon comme décrit here, mais j'obtiens une erreur. J'ai essayé la méthode here aussi, mais couru dans la même erreur. Il dit:Impossible de changer l'icône jFrame/charger une ressource pour un fichier .jar avec Eclipse

"erreur Uncaught l'image enjoués:
java.lang.NullPointerException ..."

Je ne pouvais pas trouver une solution à cela. Je peux charger l'icône de l'image en utilisant ceci:

setIconImage(new ImageIcon("etc/image.png").getImage()); 

Mais cela ne fonctionne pas avec un .jar.

EDIT: en utilisant

Image im = ImageIO.read(new File("etc/image.png")); 

Et puis en créant le ImageIcon me donne pas d'erreur, mais ne fonctionne pas avec le .jar, même si j'utilise l'option Exporter comme décrit here.

EDIT 2: OK, en mettant mon/etc dossier dans le dossier/bin créé pour le projet résolu cela. Je n'ai ABSOLUMENT AUCUNE IDÉE pourquoi, alors je serais reconnaissant si quelqu'un pouvait m'expliquer cela. Attendez, ça ne vous dérange pas. Cela ne fonctionne pas pour le .jar.

EDIT 3:Solution to the problem here.

Fondamentalement, vous créez un dossier dans/src et ensuite importez les fichiers dedans. Mec, je ne peux pas croire que j'ai perdu tellement de temps là-dessus. RAGE

+0

Pour une meilleure aide plus tôt, après un SSCCE (http://pscode.org/sscce.html) basé sur la méthode getResource et la structure du Jar (en sortie de l'outil jar). –

Répondre

0

J'utilise cet extrait, remplacez Config par votre nom de classe.

public static ImageIcon loadImageIcon(String filename) { 

    URL url = Config.class.getClassLoader().getResource(IMAGE_DIR + filename); 
    if (url == null) { 
     System.err.println("No image for " + filename); 
     return null; 
    } 
    ImageIcon icon = new ImageIcon(url); 
    return icon; 
} 
+0

ce code me renvoie null. Je ne comprends pas, l'image est là. – zxcvbnm

+0

désolé d'entendre cela, obtenez-vous le msg "aucune image" d'abord, de sorte que vous n'avez pas de problème de classe-chargeur. essayez-vous de charger de grandes images? donc peut ne pas combiner les deux suggestions. J'ai utilisé ceci pour charger des icônes 16x16, et je n'ai jamais eu de points blancs dans mon application – stacker

+0

J'ai eu des problèmes pour charger des icônes pendant longtemps, jusqu'à ce que je réalise que le mauvais chargeur de classe (le chargeur de classe bootstrap) était utilisé. Pour aider à obtenir le chargeur de classe de contexte, il est plus fiable d'utiliser this.getClass(). GetResource (IMAGE_DIR + filename); - puisque 'this' ne peut être appelé qu'à partir d'une classe personnalisée - qui devrait être chargée par le chargeur de classe de contexte. –

1

Lors de la création de ImageIcon, l'image est chargée dans un fil distinct. Il est donc possible que l'image ne soit pas encore chargée après la création de ImageIcon.

Ce que vous pouvez essayer est la suivante (solution simple, mieux est d'utiliser une sorte d'auditeur je pense):

ImageIcon imageIcon = new ImageIcon("etc/image.png"); 

int loadingDone = MediaTracker.ABORTED | MediaTracker.ERRORED | MediaTracker.COMPLETE; 

while((imageIcon.getLoadStatus() & loadingDone) == 0){ 
    //just wait a bit... 
} 
if(imageIcon.getLoadStatus() == MediaTracker.COMPLETE) 
    setIconImage(imageIcon.getImage()); 
else { 
    //something went wrong loading the image... 
} 

MediaTracker est java.awt.MediaTracker

Questions connexes