2013-08-31 111 views
3

我試圖從可執行JAR文件加載圖像。在jar文件中加載圖像

我查看了here的信息,那麼來自here的信息。

這是檢索圖像功能:

public static ImageIcon loadImage(String fileName, Object o) { 
    BufferedImage buff = null; 
    try { 
     buff = ImageIO.read(o.getClass().getResource(fileName)); 
     // Also tried getResourceAsStream 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
    if (buff == null) { 
     System.out.println("Image Null"); 
     return null; 
    } 
    return new ImageIcon(buff); 
} 

這是它如何被稱爲:

logo = FileConverter.loadImage("/pictures/Logo1.png", this); 
JFrame.setIconImage(logo.getImage()); 

隨着是一個簡單的對象。 我也沒有得到NullPointerException,除非它被UI屏蔽。

我檢查了JAR文件和圖像是:

/pictures/Logo1.png

這個當前代碼工作無論是在Eclipse中,當它被導出到一個JAR並運行在終端中,但在雙擊JAR時不起作用,在這種情況下,該圖標是默認的JFrame圖標。

謝謝你的幫助。這可能只是我失去了一些明顯的東西。

+0

即使雙擊'JAR'文件或者通過'命令提示符'運行它,它在我身邊也能正常工作。我在eclipse juno中創建了[這個項目](https://www.dropbox.com/s/32txnn42zxwebzi/SwingTest.zip),你也可以測試一下:-) –

+0

如果你這樣做 - 「返回新的ImageIcon(getClass ().getResource(「/ pictures/Logo1.png」));'直接? –

回答

2

我曾經有類似的問題,結果發現問題的相對地址和我的路徑在某個地方出錯了。我從一些我寫的使用絕對路徑的舊代碼中挖掘出來。這似乎解決了我的問題;也許它會爲你工作。

String basePath = (new File(".")).getAbsolutePath(); 
basePath = basePath.substring(0, basePath.length()-1); 
FileConverter.loadImage(basePath+"/pictures/Logo1.png", this); 
+0

這是導致完整的文件名爲/幾何形狀//圖片/ Logo1.png,對於延遲迴復 – Adude11

+0

我對它進行了修復,問題出在我的操作系統上。無論如何,感謝您的幫助。 – Adude11