2011-09-21 2 views
2

J'ai développé une application que j'exporte dans un fichier exécutable (y compris les bibliothèques dont il a besoin). Tout fonctionne bien.Java: définition d'une icône dans une application jar

Lorsque vous exécutez l'application d'Eclipse Je suis en mesure de changer l'icône de la fenêtre de l'application montre:

BufferedImage image = null; 
try { 
    image = ImageIO.read(this.getClass().getResource("AT42.png")); 
} catch (IOException e) {e.printStackTrace();} 
this.setIconImage(image); 

L'image est placée dans mon répertoire de fichiers .class.

Quand je le lance à partir d'Eclipse il montre l'icône, mais quand je crée un pot runnable et l'exécuter je reçois l'exception suivante:

Exception in thread "main" java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     at java.lang.reflect.Method.invoke(Unknown Source) 
     at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
Caused by: java.lang.IllegalArgumentException: input == null! 
     at javax.imageio.ImageIO.read(Unknown Source) 
     at com.tools.at4.UserInterface.<init>(UserInterface.java:43) 
     at com.tools.at4.GeneradorInformes.main(GeneradorInformes.java:8) 
     ... 5 more 

Je suppose que l'icône est pas inclus dans le fichier jar, Ma question est, y at-il un moyen de l'incluader, de sorte que lorsque je cours le fichier jar les fenêtres qui sont créées montrent mon icône au lieu de la coupe Java?

Merci!

+0

Jar fichier est juste archive zip, ouvrez-le et vérifiez. –

+2

Salut dedalo. Comment créez-vous le fichier JAR? –

+1

+1 Matt. Exactement, comment créez-vous votre fichier jar? Utilisez-vous la propre fonction de création d'un jar exécutable propre à Eclipse, ou bien votre script ANT personnalisé ou simplement l'utilisation de la commande jar? En utilisant la fonctionnalité Eclipse, il suffit d'inclure votre png à côté de la source Java et il devrait être inclus. –

Répondre

1

Avec le chemin que vous utilisez votre image doit être placé à la racine de votre fichier jar. En supposant que vous avez votre image dans un répertoire dans votre projet appelé « images », cette tâche ANT placerait l'image (s) à la racine de votre pot:

<target name="construct-jar" depends="compile,javadoc"> 
    <copy todir="${build.dir}"> 
     <fileset dir="images"/> 
    </copy> 
    <jar destfile="${dist.dir}/${jar.name}" basedir="${build.dir}"/> 
</target> 
0

Si je mets le fichier dans lequel les fichiers .class est-ce que je devrais modifier mon code comme ceci:

image = ImageIO.read(this.getClass().getResource("/AT42.png")); 

Merci!

+0

Ahh, oui, le/manquait. –

Questions connexes