2009-11-02 73 views
3

工作,我有以下代碼:ClassLoader.getResource方法,()不從.jar文件

private final ImageIcon placeHolder = new ImageIcon(this.getClass().getClassLoader().getResource("Cards\\trans.png")); 

但是一旦我的應用程序導出到文件.jar這是行不通的。

+3

不工作怎麼樣?你會得到一個異常?它沒有渲染?請更具體的 – 2009-11-02 22:17:06

+0

http://stackoverflow.com/questions/31127/java-swing-displaying-images-from-within-a-jar,由jjnguy發佈在BalusC – 2009-11-02 22:27:29

+1

鏈接到的問題同學? http://stackoverflow.com/questions/1662686/images-will-not-work-in-a-jar-file – BalusC 2009-11-02 22:19:30

回答

10

你的「\ t」的被編譯爲一個標籤 - 你需要逃避它:

private final ImageIcon placeHolder = new ImageIcon(
    this.getClass().getClassLoader().getResource("Cards\\trans.png")); 

注意的雙反斜線。這當然不是唯一的錯誤 - 但它是一個開始...

實際上,我會用正斜槓來指定它。無論如何,這對Windows和基於Unix的操作系統都有效,它也適用於jar文件。我突出顯示雙反斜槓的唯一原因是總體上提高了字符串轉義的點。試試這個:

private final ImageIcon placeHolder = new ImageIcon(
    this.getClass().getClassLoader().getResource("Cards/trans.png")); 

接下來,確保你的文件,包括案例得到了確切的正確名。即使Windows文件系統通常不區分大小寫,jar文件也是如此。如果它實際上是「卡片」而不是「卡片」或「TRANS.png」而不是「trans.png」,它將不起作用。

+0

是否有你在ClassLoader而不是僅僅是類上調用getResource的原因? (即不會getClass()。getResource()工作?) – JRL 2009-11-02 22:28:08

+0

@JRL:如果您從類加載器調用它,它相對於jar文件的根而不是類。不過,您可以使用前導斜槓從調用Class.getResource獲得相同的效果。 – 2009-11-02 23:01:46

2

使用此爲jar文件中獲取圖像

ClassLoader.getSystemResource("images/Springz3.png"));

+0

哦。 EM。哎呀。你不知道我在尋找這個答案有多久。大家一直說要使用getResource(..),但這對於jar文件中的圖像/聲音無效!你必須使用getSystemResource(..)!!!!!謝謝你這個答案! – BigSauce 2013-12-08 18:42:41

+0

請不要提及。 – Basil 2017-04-06 16:04:48