Java:在jar应用程序中设置图标

时间:2011-09-21 21:36:15

标签: java jar icons

我开发了一个应用程序,我将其导出到一个可运行的jar(包括它需要的库)。一切正常。

从Eclipse运行应用程序时,我可以更改应用程序窗口显示的图标:

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

图片放在我的.class文件目录中。

当我从Eclipse运行它时会显示图标,但是当我创建一个可运行的jar并执行它时,我得到以下异常:

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

我想这个图标不包含在jar文件中,我的问题是,有没有任何方法可以包含它,所以当我运行jar文件时,创建的窗口会显示我的图标而不是Java杯? / p>

谢谢!

2 个答案:

答案 0 :(得分:1)

使用您使用图像的路径需要放在jar文件的根目录下。假设您的图像位于项目中名为“images”的目录中,则此ANT任务会将图像放在jar的根目录中:

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

答案 1 :(得分:0)

如果我把文件放在.class文件的位置,我应该像这样修改我的代码:

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

谢谢!