2009-09-03 55 views
0

海 我有設計在netbeans6.0.1的應用程序,我需要顯示圖像作爲logo.My編碼是如下運行一個JAR文件單獨

mLogo = new JLabel(); 
URL lUrlLogo = getclass().getResource("/com/images/image.gif"); 
Image lLogoimage = Toolkit.getDefaultToolkit().getImage(lUrlLogo); 
ImageIcon licon = new ImageIcon(lLogoimage); 
mLogo.setIcon(licon); 

我的代碼工作正常,當我執行它在NetBeans但是當我嘗試運行這是由NetBeans的在DIST文件夾中創建我的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) 

請告訴我用我的罐子 的問題可以有人幫我跑我的罐子 感謝你

回答

3

你的jar文件將需要包含圖像。

請參閱this tutorialthis one瞭解如何操作的說明。基本上,如果您將文件包含在源文件夾中(使用適當的路徑),它應該沒問題。

如果你認爲你已經得到的圖像存在,運行

jar tvf file.jar 

顯示的內容。確保一切都在你期望的目錄中。


編輯:根據意見,問題原來是由於區分大小寫。

查找jar文件中的資源是總是區分大小寫,而從文件系統加載它們只在文件系統是大小寫敏感的情況下才是大小寫敏感的。因此,如果您的文件是image.GIF但您正在尋找image.gif,那麼當您從Windows中的文件系統加載時,它將起作用,但不在jar文件中加載。

+0

是的,我有我的罐子裏面和我需要它的位置的圖像 – chaithu 2009-09-03 06:50:37

+0

但仍然不工作 – chaithu 2009-09-03 06:51:29

+0

如果你調用getResourceAsStream()而不是getResource(),會發生什麼?如果它返回null,那麼它聽起來像文件*不在*那裏或在正確的地方。你在套管方面是否正確?即使您的普通文件系統不區分大小寫,jar文件中的資源查找也不會。 – 2009-09-03 06:58:57

0

而且您已檢查JAR文件是否包含路徑"/com/images/image.gif"?另外,我並不確定主導斜線,我總是使用相對路徑來訪問資源(但我猜它應該工作)。

由於從it.lapo.example.Main類我使用getClass().getResource("resources/logo.png")一個例子,在JAR文件是這樣說的:

it/lapo/example/Main.class 
it/lapo/example/resources/logo.png 

我知道......沒有太多從你自己的例子不同,但是它的工作...所以我想你的觀點也很接近正確。

+0

我已經使用了相對路徑,並在指定的路徑中找到了我的圖片,但仍然無法工作 – chaithu 2009-09-03 06:54:08