View Full Version : [Java] Problema caricamento ImageIcon da altro Package
<^MORFEO^>
26-08-2013, 10:23
Salve a tutti! :)
Ho un problema... Usando Netbeans io ho creato due progetti separati con ovviamente due package diversi. Il primo package contiene solamente una classe MainA.java mentre il secondo package contiene delle classi X.java Y.java e la classica cartella images deve sono contenute delle immagini. In paratica la situazione è questa:
- Progetto A nome: progetto.a.grafica
-- progetto.a.grafica
--- MainA.java
- Progetto B nome: progetto.b.code
-- progetto.b.code
--- X.java
--- Y.java
--- images
---- smile.png
L'URL di MainA in paratica è: Progetto/progetto.a.grafica/src/progetto/a/grafica/MainA.java
L'URN di smile.png è: Progetto/progetto.b.code/images/smile.png
La mia domanda è... come posso far caricare a MainA.java (package progetto.a.grafica) l'ImageIcon di smile.png che si trova nell'altro package (progetto.b.code)? :stordita:
Ho provato con:
URL risorsa = progetto.a.grafica.MainA.class.getResource("/progetto.b.code/images/smile.png");
ImageIcon smile = new ImageIcon(risorsa);
o con
URL risorsa = progetto.a.grafica.MainA.class.getResource("progetto.b.code/images/smile.png");
ImageIcon smile = new ImageIcon(risorsa);
o con
Image smile = new Image(this.getClass().getResource("progetto.b.code/images/smile.png"));
ma niente.. probabilmente sbaglio l'indirizzo o l'approccio per ottenere l'immagine... :(
<^MORFEO^>
27-08-2013, 21:17
up
I package in java non sono altro che cartelle. Quando usi getResource() per caricare un file devi ricordarti di sostituire i punti con degli slash. Quindi progetto.b.code diventa /progetto/b/code/.
URL risorsa = progetto.a.grafica.MainA.class.getResource("/progetto/b/code/images/smile.png");
<^MORFEO^>
28-08-2013, 09:33
I package in java non sono altro che cartelle. Quando usi getResource() per caricare un file devi ricordarti di sostituire i punti con degli slash. Quindi progetto.b.code diventa /progetto/b/code/.
URL risorsa = progetto.a.grafica.MainA.class.getResource("/progetto/b/code/images/smile.png");
Non funziona... :(
Ho provato con:
URL risorsa = progetto.a.grafica.MainA.class.getResource("/progetto/b/code/images/smile.png");
e
URL risorsa = progetto.a.grafica.MainA.class.getResource("progetto/b/code/images/smile.png");
ma niente, risorsa è sempre NULL
Guardando l'indirizzo da Windows,
MainA si trova in: C:\Progetto\progetto.a.grafica\src\progetto\a\grafica\MainA.java
smile.png si trova in: C:\Progetto\progetto.b.code\images\smile.png
Quei percorsi su windows sembrano un po' strani. Nel secondo progetto non mi pare di vedere i percorsi del package. Non è che hai messo la cartella images nel package di default? Non avendo sotto mano il progetto di netbeans è difficile aiutarti. Prova con
URL risorsa = progetto.a.grafica.MainA.class.getResource("/images/smile.png");
<^MORFEO^>
28-08-2013, 22:17
Quei percorsi su windows sembrano un po' strani. Nel secondo progetto non mi pare di vedere i percorsi del package. Non è che hai messo la cartella images nel package di default? Non avendo sotto mano il progetto di netbeans è difficile aiutarti. Prova con
URL risorsa = progetto.a.grafica.MainA.class.getResource("/images/smile.png");
Provo a spiegarmi diversamente..
Io ho creato un progetto che ho memorizzato nella cartella C:\Progetto\
Questo progetto è diviso in due parti con due package diversi.
- La prima parte è nella cartella C:\Progetto\progetto.a.grafica\ e su Netbeans è quindi tutto memorizzato all'interno del package dal nome progetto.a.grafica
- La seconda parte è nella cartella C:\Progetto\progetto.b.code\ e su Netbeans è memorizzato nel package dal nome progetto.b.code
All'interno di questo progetto, ho creato una cartella C:\Progetto\progetto.b.code\image dove all'interno è memorizzata la smile.png
Io desidero quindi poter importare questo smile.png dalla cartella C:\Progetto\progetto.b.code\image\ nel MainA.java dell'altra parte del progetto e quindi nel package progetto.a.grafica..
Se usassi
URL risorsa = progetto.a.grafica.MainA.class.getResource("/images/smile.png");
MainA.java andrebbe a cercarmi smile.png nella cartella image all'interno del suo package progetto.a.grafica e quindi dentro la cartella C:\Progetto\progetto.a.grafica\image\ che non esiste... :stordita:
Se usassi
URL risorsa = progetto.a.grafica.MainA.class.getResource("/images/smile.png");
MainA.java andrebbe a cercarmi smile.png nella cartella image all'interno del suo package progetto.a.grafica e quindi dentro la cartella C:\Progetto\progetto.a.grafica\image\ che non esiste... :stordita:
Il classloader vede comunque tutti i file di tutti i package. Anche se smile.png fosse in un file jar separato in una cartella montata da una server remoto funzionerebbe comunque. L'importante è che il package sia nel classpath del programma e che il percorso sia giusto.
<^MORFEO^>
30-08-2013, 10:33
Il classloader vede comunque tutti i file di tutti i package. Anche se smile.png fosse in un file jar separato in una cartella montata da una server remoto funzionerebbe comunque. L'importante è che il package sia nel classpath del programma e che il percorso sia giusto.
NullPointerException perchè lui va a cercare la smile.png in C:\Progetto\progetto.a.grafica\image\ che non esiste essendo che l'immagine si trova in C:\Progetto\progetto.b.code\image ... :(
Controlla il classpath impostato da netbeans quando viene lanciato il programma. Se ci sono tutti e due i percorsi allora deve funzionare.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.