我开发了一个应用程序,我将其导出到一个可运行的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>
谢谢!
答案 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"));
谢谢!