如何將圖片打包到j(luò)ar中(zz)
Posted on 2007-11-16 16:13 Matthew Chen 閱讀(2071) 評(píng)論(2) 編輯 收藏 所屬分類: Java SE轉(zhuǎn)自:http://bbs.xml.org.cn/blog/more.asp?name=DMman&id=29167&commentid=60339
問(wèn)題描述:
Eclipse中使用Build Fat Jar打包后找不到圖像
源代碼如下:
URL url = getClass().getClassLoader().getResource("icons/logo.gif");
label=new JLabel("",new ImageIcon(Toolkit.getDefaultToolkit().getImage(url)),JLabel.CENTER);
在Eclipse里運(yùn)行沒(méi)有問(wèn)題
使用Build Fat Jar打包后,把jar文件拿出來(lái),總是出現(xiàn)如下錯(cuò)誤
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)
出現(xiàn)這種問(wèn)題的原因大多是因?yàn)槁窂降膯?wèn)題,往往是在項(xiàng)目中運(yùn)行正常,但是一旦打包成Jar后就不能正常顯示了,下面總結(jié)一下解決此類問(wèn)題的方法:
image=new
ImageIcon(SwingResourceManager.getImage("icons/logo.gif"));就可以了。
ImageIcon image = new ImageIcon(this.class.getResource("icons/logo.gif"));
下面對(duì)這種方式詳細(xì)說(shuō)明:
1、你將所有資源打包為andy.jar,你的類位于一個(gè)包中:package andycpp;你的圖片資源全部放在images文件夾中,而images文件夾也位于andycpp包內(nèi)。這樣的話,最終的路徑表現(xiàn)為:
|__andycpp
|__ GUITest.class
|__ images
|__ Snap1.jpg
ImageIcon img1 = new ImageIcon(imgURL);
2、另一種情況,如果你的類有很多,并且包結(jié)構(gòu)很復(fù)雜,那么你就不大可能把圖片和類放在同一個(gè)層次上,而是應(yīng)該把圖片放到最外層,讓所有的類通過(guò)絕對(duì)路徑來(lái)訪問(wèn)該圖片:
|__andycpp
|__ GUITest.class
|__ images
|__ Snap1.jpg