2010-04-07 136 views
41

我需要在java項目中獲取資源圖像文件。我在做什麼是:使用getResource獲取資源()

URL url = TestGameTable.class.getClass(). 
      getClassLoader().getResource("unibo.lsb.res/dice.jpg"); 

的目錄結構如下:

unibo/ 
    lsb/ 
    res/ 
     dice.jpg 
    test/ 
    ..../ /* other packages */ 

事實是,我總是得到的文件不存在。我嘗試過很多不同的途徑,但我無法解決問題。 任何提示?

回答

79
TestGameTable.class.getResource("/unibo/lsb/res/dice.jpg"); 
  • 斜線表示在
  • ,你可以在類直接調用getResource()路徑中的類路徑的根
  • 斜槓,而不是點。
+3

要點! (15ch) – BalusC 2010-04-07 14:24:00

+4

請注意,'Class#getResource'和'ClassLoader#getResource'正在使用不同的策略將名稱映射到一個位置。 LucaB的例子實際上使用了Class ('SomeClass.class.getClass()')中的ClassLoader,但這可能是一個錯誤而不是故意的。 – jarnbjo 2010-04-07 14:45:31

+0

@jambjo是的,我認爲這是一個錯誤。 – Bozho 2010-04-07 14:46:36

9

而不是明確地寫在類名,你可以使用

this.getClass().getResource("/unibo/lsb/res/dice.jpg"); 
+9

或者'getClass()'不帶'this'。 – lmichelbacher 2015-07-03 23:24:27

+4

這假設你不在靜態環境中。 – flungo 2016-11-30 05:01:15

2

如果從靜態方法調用,使用: TestGameTable.class.getClassLoader()的getResource( 「dice.jpg」) ;

+1

如果調用靜態方法以外的情況如何? – manetsus 2015-07-19 01:34:40

1

要記住的一件事是,這裏的相關路徑是相對於你的類的文件系統位置的路徑...在你的情況TestGameTable。 class。它與TestGameTable的位置無關。 java文件。
我在這裏留下了更詳細的答案... where is resource actually located