2010-04-17 13 views
0

Je fais un jeu de torpilles pour l'école en Java avec swing gui, s'il vous plaît voir la source compressé HERE. J'utilise des icônes de boutons personnalisés et des curseurs de souris d'images stockées dans les sous-dossiers du dossier/bin/resource/graphics/default, où le dossier racine est le dossier racine du programme (ce sera également la racine du .jar final). Je suppose) qui en dehors de "bin" contient un dossier "principal" avec toutes les classes. Le chemin relatif des ressources est stocké dans les variables shipPath et mapPath de MapStruct.java. Maintenant, la classe PutPanel de Battlefield.java les trouve correctes et met en place les icônes de ses boutons, mais toutes les autres classes ne parviennent pas à obtenir leurs icônes, par ex. Le setCursor de Table.java, qui doit définir le curseur de la souris pour tous ses éléments pour l'image du vaisseau sélectionné ou le fichier this.button.setIcon de Field.java (icône); dans le constructeur, qui devrait définir l'icône pour les boutons de "l'eau". J'ai regardé avec le débogage ce qui se passe, et les images restent nuls après le chargement, bien que les chemins semblent être corrects. J'ai également essayé d'écrire un fichier de test dans le dossier image mais la méthode retourne une exception filenotfound. J'ai essayé d'obtenir le chemin de la classe pour voir si ça partait de l'endroit supposé et il semble que oui, donc je ne peux vraiment pas trouver le problème maintenant.Java swing application ne peut pas trouver l'image

Quelqu'un peut-il m'aider s'il vous plaît? Merci.

+0

Jetez un oeil à http://java.sun.com/docs/ books/tutorial/uiswing/components/icon.html pour vous donner une idée sur d'autres façons de structurer votre système de fichiers et d'utiliser getResource(). Aussi, avant de soumettre votre mission, vous devriez vraiment commenter votre code. –

Répondre

2

Vous devez charger des icônes comme ceci:

ClassLoader cl= this.getClass().getClassLoader(); 
URL imageURL = cl.getResource("resources/..."); 
ImageIcon icon = new ImageIcon(imageURL); 

Et vous devez ajouter votre dossier de ressources à l'classpath dans Eclipse. Notez que le chemin d'accès n'est pas un chemin de fichier, de cette façon il fonctionnera si vous décidez de regrouper votre application dans un fichier jar.

+0

Merci, et désolé pour le manque de commentaires –

+0

On dirait que les ressources doivent être placées à l'intérieur de la structure du paquet seulement. Donc, si je place les images \ a.png à côté de mon fichier Test.java dans Eclipse cela fonctionne. – Teddy

0
btnRegistration.setIcon(createImageIcon("reg.png")); 

protected ImageIcon createImageIcon(String path) { 
    java.net.URL imgURL = Master.class.getClassLoader().getResource(path); 
    if (imgURL != null) { 
    return new ImageIcon(imgURL); 
    } else { 
    System.out.println("Couldn't find file: " + path); 
    return null; 
    } 
} 

ici btnRegistration est mon DButton Maître est ma classe et reg.png est mon image qui appartient à mon projet

+0

commentez ici si vous avez des questions pour intégrer cette méthode. –