Il mio file jar non verrà caricato immagini
-
10-10-2019 - |
Domanda
Attualmente sto scrivendo un programma che ho bisogno di inviare ad un amico, come un vaso. Il programma ha le immagini che devono essere caricati per il programma per funzionare correttamente e voglio tutto per essere contenuta in un vasetto. Attualmente non funziona dal jar eseguibile o quando l'eseguo attraverso la linea di comando. Funziona in netbeans però.
Ecco il codice che sto usando:
Per caricare l'immagine che sto usando:
protected ImageIcon createImageIcon(String path, String description)
{
java.net.URL imgURL = getClass().getClassLoader().getResource(path);
if (imgURL != null)
{
return new ImageIcon(Toolkit.getDefaultToolkit()
.getImage(imgURL),description);
}
else
{
System.err.println("Couldn't find file: " + path);
return null;
}
}
per l'URL ho provato anche solo
getClass().getResource(path)
La linea dove si suppone che l'immagine da creare è:
this.img =createImageIcon(File.separator+"."+File.separator
+"resources"+File.separator+"tiles"+File.separator+"tile.png","tile");
Il mio file jar è configurato con la cartella che contiene i file di classe e la risorsa della cartella sia sul piano superiore di esso.
Ho cercato in giro per modi per risolvere questo, ma non riesco a trovare tutto ciò che funziona.
Grazie.
Soluzione
L'URL valuterà a "/./resources/tiles/tile.png"
, che non ha senso (ma forse la ClassLoader
che viene utilizzato quando si esegue dal NetBeans tollera l'errore.)
Prova a far cadere il "/./"
iniziale. Inoltre non è necessario i riferimenti alla File.separator
come la stringa viene trattato come un URL relativo e la barra è sempre valido.
Altri suggerimenti
Invece di usare /./resources/back_img.png
, uso resources/back_img.png
con ClassLoader
.
Ecco esempio:
String path = "resources/back_img.png";
ClassLoader cl = ImageHandler.class.getClassLoader();
URL imgURL = cl.getResource(path);
//URL imgURL = ImageHandler.class.getResource(path);
if (imgURL != null) {
ImageIcon icon = new ImageIcon(imgURL, description);
Image img = icon.getImage();
Image sizedImg = img.getScaledInstance(width, height, Image.SCALE_DEFAULT);
return new ImageIcon(sizedImg);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
Nonostante qualsiasi altra cosa il codice ha la proprietà non invidiabile di essere fail-lento.
Provare qualcosa di simile
URL x = get class.getclassloader.getresource(...)
If x == null
Throw new defect "expected ... But it wasn't there"
Ci scusiamo per la formattazione, ma l'iPad rende troppo difficile farlo bene.