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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top