2013-11-15 47 views
0

我有一個在Eclipse中運行良好的Java項目,但是當我將它導出到可運行Jar文件(選中「需要將包裝庫導入jar」)時,出現以下錯誤:導出可運行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(JarRsrcLoa 
    der.java:58) 
Caused by: java.lang.NullPointerException 
    at javax.swing.ImageIcon.<init>(Unknown Source) 
    at cib.cad.kernel.cmds.StartGui.doCmd(StartGui.java:94) 
    at cib.util.cmd.CmdMgr.doCmd(CmdMgr.java:91) 
    at cib.cad.kernel.Kernel.begin(Kernel.java:1058) 
    at cib.cad.Stylemaster.main(Stylemaster.java:70) 
    ... 5 more 
Exception in thread "Thread-1" java.lang.NullPointerException 
    at cib.cad.kernel.Kernel.setPreferredLocation(Kernel.java:2615) 
    at cib.cad.view.ErrorMessagePrintStream$MsgThread._showMessageDialog(Err 
    orMessagePrintStream.java:303) 
    at cib.cad.view.ErrorMessagePrintStream$MsgThread.run(ErrorMessagePrintS 
    tream.java:268) 

而在StartGui.doCmd(StartGui.java:94)的代碼如下所示:

try { 
     ClassLoader cl = StartGui.class.getClassLoader(); 
     URL url = cl.getResource("cib/cad/img/StyleIcon.jpg");  
     Image icon = new ImageIcon(url).getImage(); //<-- Line 94 
     frame.setIconImage(icon); 
} 
catch (IllegalArgumentException e) { 
} 

我假設這個空指針異常所引起,因爲它無法找到圖標,但我不不完全理解爲什麼它會在日蝕中完美運行。

在此先感謝善良的人。

回答

0

試試這個。

Image icon = new ImageIcon(StartGui.class.getClassLoader() 
          .getResourceAsStream("cib/cad/img/StyleIcon.jpg")) 
          .getImage(); 

希望這會有所幫助。