2011-09-21 30 views
2

我開發了一個導出到可運行jar(包括它需要的庫)的應用程序。一切正常。Java:在jar應用程序中設置圖標

當運行Eclipse中的應用程序,我能夠改變應用程序窗口顯示的圖標:

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

圖片放在我的.class文件目錄。

當我從Eclipse中運行它,它顯示的圖標,但是當我創建了一個可運行的罐子並執行它,我得到以下異常:

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

謝謝!

+0

Jar文件只是zip存檔,打開它並檢查。 –

+2

嗨dedalo。你是如何創建JAR文件的? –

+1

+1 Matt。確切地說,你是如何創建你的jar文件的?您是否使用Eclipse自己創建的可執行文件夾又名'導出'功能或您的自定義ANT腳本或僅使用jar命令?在使用Eclipse功能時,只需將你的PNG包括在java源文件中,它就應該包含在內。 –

回答

1

由於您使用映像的路徑需要放在jar文件的根目錄下。假設你有你的形象在你的項目的目錄名爲「圖像」,這ANT任務會把圖像(S)在您的罐子根:

<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

如果我把文件,其中的.class文件我應該這樣修改我的代碼:

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

謝謝!!

+0

啊,是的,/失蹤了。 –

相關問題