2011-01-13 5 views
1

Je suis en train d'écrire un programme que je dois envoyer à un ami en pot. Le programme a des images qui doivent être chargées pour que le programme fonctionne correctement et je veux que tout soit contenu dans un pot. Actuellement, il ne fonctionne pas à partir du fichier exécutable ou lorsque je l'exécute via la ligne de commande. Cela fonctionne cependant dans netbeans.Mon fichier jar ne chargera pas les images

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é juste

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 les fichiers de classe et le dossier de ressources au niveau supérieur de celui-ci.

J'ai cherché des moyens de résoudre ce problème, mais je ne trouve rien qui fonctionne.

Merci.

+0

Sur votre fonction « createImageIcon » êtes-vous dans le nom de fichier passait où l'image va être créé? Parce que si c'est le cas, cela signifie que le fichier est sauvegardé dans /./resources/tiles/tile.png "ce qui équivaut à" /resources/tiles/tile.png "qui serait au niveau racine du système de fichiers. Dans ce cas, il ne sera pas trouvé par votre chemin de classe une fois que vous l'avez déployé –

+0

que diriez-vous d'utiliser/à la place de File.separator et d'avoir "/resources/titles/tile.png" au lieu de "/./resources/titles/tile .png "qui peut être un chemin incorrect selon le système – dvhh

Répondre

2

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 laissant tomber le "/./" initial. De même, vous n'avez pas besoin des références à File.separator car la chaîne est traitée comme une URL relative et la barre oblique est toujours valide.

0

Malgré tout, votre code a la propriété peu enviable d'être défaillant.

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.

1

Au lieu d'utiliser /./resources/back_img.png, utilisez resources/back_img.png avec ClassLoader.
est par exemple ici:

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; 
    } 
Questions connexes