2015-08-31 131 views
4

基本上,我想將我的主要JFrame的圖標包含在JAR文件中,因此不需要從外部位置加載它。使用ClassLoader獲取資源的路徑

爲了達到這個目的,我搜索了關於Java的資源系統。 我已經使用Eclipse完成:

  1. 我已經創建了一個名爲新文件夾 「資源」:

  2. 我抄它裏面的文件,使用Windows的資源管理器:

  3. 我已將該文件夾作爲源文件夾:

  4. 我寫了這個代碼:

    URL url = ClassLoader.getSystemResource("/res/icona20.ico"); 
    

urlnull。 我做錯了什麼?

+1

擺脫路徑中的'/ res' –

+1

將文件夾添加到構建路徑時,它不是路徑的一部分,而是將所有內容放在類路徑的根目錄 –

+2

請參見[這裏] (http://stackoverflow.com/a/25636097/2587435) –

回答

3

如前所述你似乎已經加入res作爲源文件夾,所以它是根,而不是名稱,如src

URL url = ClassLoader.getSystemResource("icona20.ico"); 

類加載器使用一個絕對(區分大小寫)的路徑,而無需明確的斜線/...

與絕對路徑強制性斜線相對路徑:

URL url = Xyz.class.getResource("/icona20.ico"); 

,你可能會喜歡.png代替.ico因爲後者格式不是在Java SE標準。

(關於常見的做法)的構建工具maven使用一樣好標準以下的源文件夾:

/src/main/java/ 
/src/main/resources/ 
/src/test/java/ 
/src/test/resources/ 

你的res使用讓人聯想到微軟的Visual Studio中的)。

+0

是的,我有一個[tag:vb.net]背景。沒有像'ClassLoader.getResource(String)'這樣的靜態方法。 –

+0

你是對的;應該是'getSystemResource'。糾正。我認爲安德烈斯也是這樣糾正的,他的回答應該是足夠的,並且是第一。 –

+0

作爲一個方面說明,您不能使用.ico圖像來顯示'JFrame'的圖標;您可以改用.png格式。感謝您指出。 –

3

類加載器將從您添加到類路徑的每個源文件夾開始獲取資源。因此,URL應該是以下幾點:

URL url = ClassLoader.getSystemResource("icona20.ico");