Domanda

Quando si esegue un'app Java da Eclipse, la mia ImageIcon viene visualizzata correttamente.

Ma dopo aver creato un barattolo il percorso verso l'immagine ovviamente viene incasinato.

C'è un modo per estrarre un'immagine dal jar in fase di esecuzione in modo da poterla aprire?Oppure c'è un modo migliore per farlo?

Mi piacerebbe distribuire un singolo file jar, se possibile.

È stato utile?

Soluzione

Per creare un ImageIcon da un file immagine all'interno degli stessi jar viene caricato il tuo 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 costruire un URL per una risorsa in un jar non sul tuo "classpath", consulta la documentazione di java.net.JarURLConnection.

Altri suggerimenti

Puoi provare qualcosa del tipo:

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 classe qui)
- immagini
----immagine.jpg

Funziona per caricare e impostare l'immagine di sfondo del riquadro dei contenuti:

jar (o percorso di creazione) 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 sia in esecuzione jar che unjarred (è questo il termine tecnico).

A proposito getClass().getClassLoader().getResourceAsStream("/img/bg.png") - che ho provato per primo - mi ha restituito un InputStream nullo.

In netbeans 8.1 quello che ho fatto è includere la cartella di icone e altre immagini chiamata Risorse dentro il src cartella nel file di progetto.Quindi ogni volta che costruisco Vaso file la cartella è inclusa lì. L'albero dei file dovrebbe essere così:

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

    • file.java
  • Risorse

    • immagine.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 il runtime equivale a caricare l'immagine quando eseguita dall'IDE, ad esempio netbeans, la differenza è che quando si carica l'immagine dal file JAR il percorso deve essere corretto e il suo maiuscole e 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à.controlla gli spazi, i casi e l'ortografia

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top