43 votes

Java Swing: Affichage d'images depuis un pot

Lors de l'exécution d'une application Java depuis Eclipse, mon ImageIcon se présente très bien.

Mais après la création d'un pot, le chemin d'accès à l'image est visiblement foiré.

Y a-t-il un moyen d'extraire une image du pot au moment de l'exécution pour que je puisse ensuite l'ouvrir? Ou, y a-t-il une meilleure façon de faire cela?

J'aimerais distribuer un fichier JAR unique si possible.

33voto

Tom Hawtin - tackline Points 82671

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

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

Class.getResource renvoie l'URL d'une ressource (ou null !). ImageIcon a un constructeur qui se charge depuis une URL.

Pour construire une URL pour une ressource dans un fichier jar ne se trouvant pas sur votre "chemin de classe", reportez-vous à la documentation pour java.net.JarURLConnection .

21voto

Outlaw Programmer Points 6610

Vous pouvez essayer quelque chose comme:

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

Dans votre fichier JAR, vous pouvez avoir une structure de répertoire de:

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

10voto

ekerner Points 1664

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

jar (ou chemin de compilation) 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 fonctionnant à la fois dans le bocal et dans l'exécution sans jarrets (est-ce le terme technique).

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X