Java Swing: visualizzazione delle immagini da un Jar

Quando si esegue un’app Java da eclipse, il mio ImageIcon si presenta bene.

Ma dopo aver creato un barattolo il percorso verso l’immagine ovviamente si fa rovinare.

C’è un modo per estrarre un’immagine dal jar in fase di runtime in modo che possa quindi aprirlo? O c’è un modo migliore per farlo?

Mi piacerebbe distribuire un singolo file jar se ansible.

Per creare un ImageIcon da un file immagine all’interno degli stessi vasi viene caricato il codice:

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

Class.getResource restituisce un URL di una risorsa (o null !). ImageIcon ha costruttori che caricano da un URL.

Per build un URL per una risorsa in un jar non sul “classpath”, consultare la documentazione di java.net.JarURLConnection .

Puoi provare qualcosa come:

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

Nel tuo file JAR, potresti avere una struttura di directory di:

MyJAR.jar
– com (file di class qui)
– immagini
—- image.jpg

Questo funziona per me per caricare e impostare l’immagine di sfondo del riquadro del contenuto:

jar (o percorso di costruzione) contiene:

  - com - img ---- bg.png 

java contiene:

 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(); } 

Testato e funzionante in entrambe le versioni jar e unjarred (è il termine tecnico).

BTW getClass().getClassLoader().getResourceAsStream("/img/bg.png") – che ho provato prima – mi ha restituito un InputStream nullo.

In netbeans 8.1 quello che ho fatto è includere la cartella di icone e altre immagini chiamate Risorse all’interno della cartella src nel file di progetto. Quindi ogni volta che costruisco il file Jar , la cartella è inclusa. L’albero dei file dovrebbe essere così:

  • src (i file Java nei pacchetti sorgente sono qui)
  • ** PACCHETTO CHE HA NOMINATO NEL PROGETTO **

    • file.java
  • risorse

    • image.jpg

Il codice dovrebbe essere come:

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

Caricare l’immagine dal file Jar durante la fase di esecuzione è come caricare un’immagine quando viene eseguita da IDE, ad esempio netbeans la differenza è che quando si carica l’immagine dal file JAR il percorso deve essere corretto e la sua maiuscole / minuscole (molto importante). Questo funziona per me

  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));

se p in “/Pictures/firstgame/habitat1.jpg” è in minuscolo non funzionerà. controllare spazi, casi e ortografia