Problema con percorsi in un vaso Java
Domanda
Ho una cartella chiamata Etc che ha un'immagine che voglio usare in un altro file nella stessa cartella, Esempio.java. Quindi ho Etc \ image.png ed Etc \ Example.java. Ho provato a utilizzare " Etc / image.png " come percorso dell'immagine, ma non ha funzionato. Come devo procedere?
Supponiamo inoltre che i file fossero in pacchetti diversi, come potrei farlo?
Le mie principali classi .java sono in un pacchetto chiamato Main, per la cronaca.
Modifica
Ho usato questo:
ClassLoader.getSystemClassLoader () getResource. (& Quot; Etc \ image.png ");
Soluzione
È possibile utilizzare Class.getResource ()
, che utilizza il programma di caricamento classi per ottenere un URL per la risorsa. Ad esempio:
import java.net.URL;
import javax.swing.ImageIcon;
public class Example {
public ImageIcon getImage() {
URL url = Example.class.getResource( "image.png" );
if( url != null ) {
return new ImageIcon( url );
}
return null; // TODO: Better error handling
}
}
La parte importante è Example.class.getResource (" image.png ")
- il percorso dell'immagine è specificato in relazione alla classe nominata; in questo caso, si trova nella stessa directory del file di classe. Puoi anche utilizzare questa riga in qualsiasi altra classe, lasciando intatto il riferimento a Example.class
.
Altri suggerimenti
Prima le prime cose.
Etc è un pacchetto? In altre parole nella parte superiore del tuo file di esempio hai un
pacchetto Etc;
???
Di solito i nomi dei pacchetti sono in minuscolo, motivo per cui chiedo.
In secondo luogo, sebbene sia possibile utilizzare percorsi relativi per accedere alle risorse, consiglierei di utilizzare sempre percorsi assoluti.
Quindi
URL url = Example.class.getResource (" /Etc/image.png");
se Etc è un pacchetto, altrimenti
URL url = Example.class.getResource (" /image.png");
se non lo è.
Perché funzioni, devi avere la directory in cui Etc è nel percorso di classe. Se è all'interno del barattolo, non ricordo se. funziona come un percorso di classe, in caso contrario, aggiungi Etc al percorso di classe e fai riferimento all'immagine senza il percorso di classe, oppure inserisci Etc in una sottodirectory. e metti quella sottodirectory nel percorso di classe.