2013-02-12 84 views
1

我似乎無法得到這個權利...在JAR文件中使用圖像

我在Eclipse中有一個名爲MyProject的Java項目。它的根目錄是文件夾bin,src和資源。在資源內部,我有一個名爲myImage.gif的圖像。

在我的代碼中,我想使用這個圖像,我希望它工作,無論這是從一個Jar文件運行。我目前正在這樣做

ImageIcon j = new ImageIcon(getClass().getResource("/resources/myImage.gif")); 

但它通過Eclipse(而不是一個Jar)運行它時吐出一個空。

這樣做的正確方法是什麼?

+0

「/resources/myImage.gif」是絕對路徑嘗試「resources/myImage.gif」 – MrSmith42 2013-02-12 22:20:49

+0

不幸的是相同的問題 – CodeGuy 2013-02-12 22:23:55

+0

打印當前路徑並通過'resources/myImage.gif'擴展它檢查這是否是路徑你的形象。 – MrSmith42 2013-02-12 22:25:27

回答

1

如果你要告訴Eclipse治療resources作爲源文件夾,那麼你應該能夠說

ImageIcon j = new ImageIcon(getClass().getResource("/myImage.gif")); 

當你來到構建JAR你必須確保resources的內容目錄進入JAR文件的頂層,以便在相同的路徑中的JAR的情況下工作,即

META-INF 
    MANIFEST.MF 
com 
    example 
    MyClass.class 
myImage.gif 

或者,也可能是更常見的Java習慣用語,把圖像文件在同一目錄.java文件(src/com/example在這種情況下),然後使用getResource沒有前導斜線

new ImageIcon(getClass().getResource("myImage.gif")); 

Class.getResource解析等,對包有問題的類的相對路徑。同樣,當你開始構建它時,你需要在JAR中具有相同的結構,這次使用myImage.gifcom/example之下。

0

將資源放入src,Eclipse會將其複製到bin中。

ImageIcon ii = 
    new ImageIcon(
     ImageIO.read(
     getClass().getClassLoader().getResourceAsStream(
      "resources/myImage.gif"))); 

沒有/之前的路徑。

+0

不,同樣的事情....我如何使eclipse刷新整個事情,以便清理和構建,以便資源將在倉? – CodeGuy 2013-02-12 22:32:42

+0

即使我手動將它放入垃圾箱,這仍然不起作用。同樣的問題,NullPointer ... – CodeGuy 2013-02-12 22:35:07

+0

代碼編輯和測試。它對我來說工作得很好。 – Aubin 2013-02-12 22:41:14