Mon fichier jar ne charge pas les images
-
10-10-2019 - |
Question
Je suis en train d'écrire un programme que je dois envoyer à un ami comme un pot. Le programme a des images qui doivent être chargées pour le programme fonctionne correctement et je veux que tout soit contenu dans une jarre. À l'heure actuelle, il ne fonctionne pas du pot exécutable ou quand je le lance à travers la ligne de commande. Il fonctionne cependant NetBeans.
Voici le code que je utilise:
Pour charger l'image que je utilise:
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;
}
}
pour l'URL que j'ai aussi essayé simplement
getClass().getResource(path)
La ligne où l'image est censée être créée est:
this.img =createImageIcon(File.separator+"."+File.separator
+"resources"+File.separator+"tiles"+File.separator+"tile.png","tile");
Mon fichier jar est configuré avec le dossier contenant le dossier des fichiers de classe et la ressource à la fois au niveau supérieur de celui-ci.
J'ai cherché autour des moyens de résoudre ce problème, mais je ne peux pas trouver quelque chose qui fonctionne.
Merci.
La solution
Votre URL évaluera à "/./resources/tiles/tile.png"
qui n'a pas de sens (mais peut-être le ClassLoader
qui est utilisé lorsque vous exécutez de NetBeans supporte l'erreur.)
Essayez laisser tomber la "/./"
initiale. Aussi, vous n'avez pas besoin les références à File.separator
que la chaîne est traitée comme une URL relative et la barre oblique est toujours valide.
Autres conseils
Au lieu d'utiliser /./resources/back_img.png
, utilisez resources/back_img.png
avec ClassLoader
.
Voici par exemple:
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;
}
En dépit de tout ce que votre code a la propriété peu enviable d'être fail-lent.
Essayez quelque chose comme
URL x = get class.getclassloader.getresource(...)
If x == null
Throw new defect "expected ... But it wasn't there"
Désolé pour la mise en forme, mais l'iPad rend trop difficile de le faire correctement.