Question

Lors de l'exécution d'une application Java à partir d'Eclipse, mon ImageIcon s'affiche très bien.

Mais après avoir créé un pot, le chemin vers l’image est évidemment perturbé.

Existe-t-il un moyen d'extraire une image du pot au moment de l'exécution afin que je puisse ensuite l'ouvrir ?Ou existe-t-il une meilleure façon de procéder ?

J'aimerais distribuer un seul fichier jar si possible.

Était-ce utile?

La solution

Pour créer un ImageIcon à partir d'un fichier image dans les mêmes pots, votre code est chargé :

new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))

Class.getResource renvoie l'URL d'une ressource (ou null!). ImageIcon a des constructeurs qui se chargent à partir d'une URL.

Pour construire une URL pour une ressource dans un fichier jar ne figurant pas sur votre "classpath", consultez la documentation pour java.net.JarURLConnection.

Autres conseils

Vous pouvez essayer quelque chose comme :

InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");

Dans votre fichier JAR, vous pourriez avoir une structure de répertoires de :

MonJAR.jar
- com (fichiers de classe ici)
- images
----image.jpg

Cela fonctionne pour moi pour charger et définir l'image d'arrière-plan du volet de contenu :

jar (ou chemin de construction) contient :

 - com
 - img
 ---- bg.png

java contient :

JFrame f = new JFrame("Testing load resource from jar");
try {
    BufferedImage bg = ImageIO.read(getClass().getResource("/img/bg.png"));
    f.setContentPane(new ImagePanel(bg));
} catch (IOException e) {
    e.printStackTrace();
}

Testé et fonctionnel en exécution en pot et sans pot (c'est le terme technique).

D'AILLEURS getClass().getClassLoader().getResourceAsStream("/img/bg.png") - que j'ai essayé en premier - m'a renvoyé un InputStream nul.

Dans Netbeans 8.1, ce que j'ai fait est d'inclure le dossier d'icônes et autres images appelé Ressources à l'intérieur de src dossier dans le fichier de projet.Alors chaque fois que je construis Pot fichier, le dossier y est inclus. L'arborescence des fichiers devrait ressembler à ceci :

  • src (les fichiers Java dans les paquets sources sont ici)
  • ** FORFAIT QUE VOUS AVEZ NOMMÉ DANS LE PROJET**

    • fichier.java
  • Ressources

    • image.jpg

Le code devrait ressembler à :

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));

Charger l'image à partir du fichier Jar pendant l'exécution est identique au chargement de l'image lorsqu'elle est exécutée à partir de l'EDI, par exemple Netbeans. La différence est que lors du chargement de l'image à partir du fichier JAR, le chemin doit être correct et son sensible aux majuscules et minuscules (très important).Cela fonctionne pour moi

 image1 = new javax.swing.ImageIcon(getClass().getResource("/Pictures/firstgame/habitat1.jpg"));
        img = image1.getImage().getScaledInstance(lblhabitat1.getWidth(), lblhabitat1.getHeight(), Image.SCALE_SMOOTH);
        lblhabitat1.setIcon(new ImageIcon(img));

si p dans "/Pictures/firstgame/habitat1.jpg" est en minuscule, cela ne fonctionnera pas.vérifier les espaces, la casse et l'orthographe

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top