轉自:http://bbs.xml.org.cn/blog/more.asp?name=DMman&id=29167&commentid=60339
問題描述:
Eclipse中使用Build Fat Jar打包后找不到圖像
源代碼如下:
URL url = getClass().getClassLoader().getResource("icons/logo.gif");
label=new JLabel("",new ImageIcon(Toolkit.getDefaultToolkit().getImage(url)),JLabel.CENTER);
在Eclipse里運行沒有問題
使用Build Fat Jar打包后,把jar文件拿出來,總是出現如下錯誤
Uncaught error fetching image:
JAVA.lang.NullPointerException
at sun.awt.image.URLImageSource.getConnection(Unknown Source)
at sun.awt.image.URLImageSource.getDecoder(Unknown Source)
at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
at sun.awt.image.ImageFetcher.run(Unknown Source)
出現這種問題的原因大多是因為路徑的問題,往往是在項目中運行正常,但是一旦打包成Jar后就不能正常顯示了,下面總結一下解決此類問題的方法:
image=new
ImageIcon(SwingResourceManager.getImage("icons/logo.gif"));就可以了。
ImageIcon image = new ImageIcon(this.class.getResource("icons/logo.gif"));
下面對這種方式詳細說明:
1、你將所有資源打包為andy.jar,你的類位于一個包中:package andycpp;你的圖片資源全部放在images文件夾中,而images文件夾也位于andycpp包內。這樣的話,最終的路徑表現為:
|__andycpp
|__ GUITest.class
|__ images
|__ Snap1.jpg
ImageIcon img1 = new ImageIcon(imgURL);
2、另一種情況,如果你的類有很多,并且包結構很復雜,那么你就不大可能把圖片和類放在同一個層次上,而是應該把圖片放到最外層,讓所有的類通過絕對路徑來訪問該圖片:
|__andycpp
|__ GUITest.class
|__ images
|__ Snap1.jpg