Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    151

    Caricare immagini da un file JAR

    Salve a tutti.
    Dovrei caricare delle immagini in un programma java di cui ho creato il file JAR. Le immagini sono nel file JAR stesso, in una directory chiamata "Immagini"
    La struttura del file JAR è la seguente:

    -d.jar
    ---main.class
    ------Immagini
    ---------errore.jpg
    ---------colora.jpg
    ---------splash.jpg

    Il file manifesto che uso per la creazione del jar è il seguente:
    Main-Class: Main

    Nel codice, per caricare le immagini uso istruzioni del tipo:
    JLabel label = new JLabel(new ImageIcon("Immagini//splash.jpg"));

    Come posso far trovare la cartella "Immagini" contenuta nel file JAR alla JVM?

    Grazie,saluti

  2. #2
    Così dovrebbe funzionare:

    Codice PHP:
    ImageIcon imageIcon = new ImageIcon(getClass().getResource("Immagini/splash.jpg"));
    JLabel label = new JLabel(imageIcon); 
    Al mio segnale... scatenate l'inferno!

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    151
    Ciao, grazie per l'aiuto.
    Purtroppo con questo codice ottengo un riferimento nullo a run-time nella creazione dell'icona.
    Ma non c'è un modo per estendere il classpath con le directory interne di un file JAR?
    Saluti


    Originariamente inviato da R@ve M@ster
    Così dovrebbe funzionare:

    Codice PHP:
    ImageIcon imageIcon = new ImageIcon(getClass().getResource("Immagini/splash.jpg"));
    JLabel label = new JLabel(imageIcon); 

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da senise
    Purtroppo con questo codice ottengo un riferimento nullo a run-time nella creazione dell'icona.
    Ma non c'è un modo per estendere il classpath con le directory interne di un file JAR?
    Chiariamo subito che quanto detto da R@ve M@ster è corretto ed è la strada giusta per caricare immagini in un JAR.

    Questa tecnica è anche spiegata qui nel tutorial ufficiale di Java.

    Comunque se si ha una classe chiamata es. Main e si ha questa struttura:

    codice:
    |
    +-- Main.class
    |
    +-- Immagini
            |
            +-- splash.jpg
    Allora nel sorgente di Main si può certamente fare:

    codice:
    class Main
    {
        ....
    
            ImageIcon imageIcon = new ImageIcon(Main.class.getResource("Immagini/splash.jpg"));
    }
    Io sopra ho usato un "class literal" cioè quel Main.class che in genere è preferibile (specialmente se quella riga è in un metodo statico dove non esiste il this).

    Se non funziona è per altri motivi, es. il jar non è stato creato correttamente con le giuste directory, i nomi non sono esattamente quelli ecc....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    Questo funziona te lo garantisco!!!

    Prova questo adesso, il problema dovrebbe essere risolto!



    URL imgURL = getClass().getResource("/images/picture.jpg");
    Image img = Toolkit.getDefaultToolkit().getImage(imgURL);


    In pratica devi stare attento a inserire "/" nel path name.


    Ciao alla prossima

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    151


    Grande NullPointer24!
    E' vero, mi è bastato inserire lo "/" e tutto ha funzionato.
    Quindi la soluzione al prolema è

    ImageIcon imageIcon = new ImageIcon(Main.class.getResource("/Immagini/splash.jpg"));

    Grazie a tutti.
    Saluti.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Questo funziona te lo garantisco!!!

    Originariamente inviato da NullPointer24
    URL imgURL = getClass().getResource("/images/picture.jpg");
    Se 'images' fosse la cartella "radice" dentro il jar, allora sarebbe corretto.

    Originariamente inviato da NullPointer24
    In pratica devi stare attento a inserire "/" nel path name.
    Ma ti è chiaro cosa fa getResource e la relativa questione dei '/' per getResource???

    Se ho una classe Pippo in un package pluto (quindi pluto.Pippo), invocando getResource sulla classe Pippo con un path come "images/prova.gif", allora va a cercare in classpath un percorso "pluto/images/prova.gif".

    Se invece metto un '/' davanti, il path cercato è proprio quello senza il '/' davanti, quindi solo "images/prova.gif".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da senise
    Quindi la soluzione al prolema è

    ImageIcon imageIcon = new ImageIcon(Main.class.getResource("/Immagini/splash.jpg"));
    Allora vuol dire che Immagini non è messa nella stessa cartella in cui c'è Main.class!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    151
    Ciao andbin.
    Nel file JAR all'interno della radice c'è subito il main ed allo stesso livello del main c'è la cartella Immagini e altre cartelle con altri che rappresentano altri package. Le immagini non vengono richiamate dal Main ma dal package GUI.

    Quindi la tua rappresentazione che riporto sotto è quella corretta del JAR.

    |
    +-- Main.class
    |
    +-- Immagini
    |
    +-- splash.jpg
    |
    +--Package1
    |
    +---file.class
    |
    +---GUI
    |
    +--- file.class //Qui mi servono le immagini
    +--- file.class //Qui mi servono le immagini

    Per ottenere le immagini dal PACKAGE GUI, se ho capito bene, dovre poter usare indifferentemente quste righe:

    - getClass().getResource("/Immagini/imm.gif")
    oppure
    - Main.class.getResource("Immagini/imm.gif")
    E' corretto?
    Usando la prima soluzione riesco ad ottenere le immagini.

    Grazie per l'approfondimento.
    Saluti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.