Newsgroup: it.comp.java
Titolo: Caricare immagini da un Jar

Ho visto so google che è un argomento trattato e ritrattato (anche di
recente), ma non riesco a caricare le immagini dal file jar.
Ho provato sia con con:
java.net.URL u = this.getClass().getResource("edit.gif");
ImageIcon i = new ImageIcon(u);
che con
Image myImage =
Toolkit.getDefaultToolkit().getImage(getClass().getResource("edit.gif"));
ImageIcon a = new ImageIcon(myImage);
ma in entrambi i casi funzionano perfettamente da JBuilder mentre non
vengono caricate quando lancio il jar.
Il mio progetto è strutturato come
package
	+---nome_applicazione
	       +---classi del progetto
 
Per fare delle prove, ho messo nel file jar il file "edit.gif" in tutte
le directory contenute nell'archivio: quindi è presente nella directtory
dl package, in quella del progetto e anche dove ci sono i vari file
.class, ma non funziona ugualmente. Nel progetto "sorgente" invece
l'immagine è contenuta nella stessa directory dei sorgenti delle classi.
Quello che vorrei avere alla fine è di creare nel jar una sottodirectory
"images" in cui mettere tutte le immagini.
Stavolta spero di aver spiegato tutto correttamente e non aver
dimenticato nulla ;-))
Grazie
Lis
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:68f919579298e3e4907...@mygate.mailgate.org...


nel jar c'č
effettivamente la directory images.
Ho provato anche in questo modo ma
cosě non mi funziona nemmeno da Jbuilder.
Ciao
Lis
--------------------------------
Inviato via 
http://usenet.iol.it
 

così non mi funziona nemmeno da Jbuilder.
Il tuo quesito è già stato posto _diverse_altre_volte_.
In quelle occasioni, avevo postato un metodo che mi era capitato di 
usare e che penso funzioni anche per altri (non ci sono state 
lamentele).
  public static ImageIcon getImageIcon(String name) {
    ImageIcon icon = null;
    URL iconURL = ClassLoader.getSystemResource(name);
    if(iconURL != null) {
      icon = new ImageIcon(iconURL);
    }
    return icon;
  }
HTH
-- 
Ciao
	Fabrizio C.

 lamentele).
Ho provato il tuo e altri n metodi ma purtroppo non ci sono ancora
riuscito. Anche leggendo dal forum sun ho letto decine di post in cui si
è verificato questo problema e ho provato tutte le soluzioni proposte ma
ancora niente.
Adesso provo a creare un progetto da zero in cui provo solamente a
caricare un'immagine da un Jar. La butto lì...non è che ci potrebbe
essere un bug nella versione del jdk che uso (1.3.1)??


 recente), ma non riesco a caricare le immagini dal file jar.
Missione compiuta, sono riuscito a caricare l'immagine dal Jar e sapete
qual'era la causa dei mei problemi?? il file si chiamava .Gif invece che
.gif e non ci avevo fatto proprio caso. Ho dovuto farmi una classe da 0
che facesse solo quello e alla fine, solo usando il compilatore e una
finestra dos ho scoperto dov'era il problema, perchč JBuilder me la
caricava ugualmente :-//
Va bč, grazie a tutti per l'aiuto


 .gif e non ci avevo fatto proprio caso.
[CUT]
Eheheh, quante volte è capitato anche a me, ora sono passato a Linux dove
tutto è case-sensitive, windows lascia tutto un po al caso :\
ciao, matteo

recente), ma non riesco a caricare le immagini dal file jar.
che mi dite di come si carica una immagine da un jar contenuto nel jar
della mia applicazione? il jar "interno" e' una libreria.
ciao
-- 
Seti@Home Java Applets
http://maruko.cjb.net/

della mia applicazione? il jar "interno" e' una libreria.
Da una veloce
ricerca ho visto che dovresti aprire il jar interno con un JarInputStream e
quindi crarti un tuo classloader (
http://www.javaworld.com/javaworld/jw-03-
2000/jw-03-classload.html), ma non saprei nemmeno da che parte cominciare.
Mi sembra una cosa piuttosto complicata, non ti conviene tenerli separati
oppure fare un jar unico?
HTH


 della mia applicazione? il jar "interno" e' una libreria.
A fronte di un sacco di domande uguali, ho appena finito di scrivere 
qualcosa in proposito. Siccome e' venuto fuori piu' grosso di pochi 
paragrafi, e' un documento a parte. Appena ho tempo, aggiungo domande e  
link all FAQ.
In ogni modo, questo e' il documento per ora: 
http://space.tin.it/computer/csadun/resjars.html
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun


http://space.tin.it/computer/csadun/resjars.html
non mi sembra affronti esplicitamente il mio problema... o forse
si'...
cosi' ad occhio direi di aggiungere al Manifest la riga:
Class-Path: ./JarInternoAllAltroJar.jar
questo dovrebbe far si' che le immagini/risorse contenute nel jar
interno siano visibili dall'applicazione impacchettata nel jar
esterno... ho capito bene il meccanismo?



veramente brutto questo post (alla luce di quello che ho capito poi).
in effetti non ho nessuna necessita' di aprire un jar all'interno del
jar della mia app. 
in ogni caso molto utile il tuo papero che fa un po' di ordine sulla
questione.
una sola domanda:
per quanto riguarda "1.3 classi e risorse in package/directories
diverse", dato il jar:
dir1/file1.class
dir1/imm1.gif
appdir/main.class
appdir/sub.class
appdir e' il package dell'applicazione
dir1 e' un'altro package usato dall'applicazione
pur non essendo in un metodo statico, sono riuscito a caricare
imm1.gif da sub.class solo con:
ClassLoader.getsystemClassLoader().getResource("dir1/imm.gif");
e non con:
this.getClass().getResource("dir1/imm.gif");
che non da errori ma ritorna null.


 applicazioni. 
 ^^^^^^^^^^ 
Volevo dire "risorse". :-)


che non da errori ma ritorna null.
Giusto, devo ricordarmi di precisarlo. 
Ammenoche' non usi uno slash iniziale, Class.getResource() 
e Class.getResourceAsStream() si aspettano il nome *non qualificato*, 
perche' assume il file sia nello stesso package della classe.
Bypassando Class e usando direttamente il ClassLoader, invece, la 
trasformazione la devi fare a mano.
Quindi se usi getClass().getResource("imm.gif"), imm.gif dev'essere nello 
stesso package p (cioe' nella stessa directory) della classe che fa 
l'invocazione, e appunto *non* devi esplicitamente scrivere "p/imm.gif",
perche' il methodo attacchera' "p/" automaticamente prima di invocare 
l'identico metodo sul ClasLoader.


Ammenoche' non usi uno slash iniziale, Class.getResource() 
ok. bastava mettere quel minuscolo slash iniziale e anche
Class.getResource() funziona. subito ho ignorato la tua osservazione
in quanto la soluzione col ClassLoader funzionava... poi mi sono
ovviamente scontrato col fatto che nelle applet genera una security
exception...
a questo punto mi chiedo, se sono in un metodo statico in un applet
che faccio? mi adeguo e cerco di spostare la chiamata in un metodo non
statico?
