2010-04-07 15 views
41

Ich brauche eine Ressource Image-Datei in einem Java-Projekt. Was ich tue, ist:Holen Sie sich eine Ressource mit getResource()

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

Die Verzeichnisstruktur ist die folgende:

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

Tatsache ist, dass ich immer bekommen, da die Datei nicht existiert. Ich habe viele verschiedene Wege ausprobiert, aber ich konnte das Problem nicht lösen. Irgendein Hinweis?

Antwort

79
TestGameTable.class.getResource("/unibo/lsb/res/dice.jpg"); 
  • Strich führt die Wurzel des Classpath zu bezeichnen
  • anstelle von Punkten auf dem Pfad schlitzt
  • Sie getResource() direkt auf die Klasse aufrufen können.
+3

Auf den Punkt! (15ch) – BalusC

+4

Beachten Sie, dass 'Class # getResource' und' ClassLoader # getResource' unterschiedliche Strategien verwenden, um den Namen einem Ort zuzuordnen. Das Beispiel von LucaB verwendet tatsächlich den ClassLoader aus der Klasse ('SomeClass.class.getClass()'), aber das ist wahrscheinlich ein Fehler und nicht absichtlich. – jarnbjo

+0

@jambjo Ja, ich nahm an, dass es ein Fehler ist. – Bozho

9

Statt explizit den Klassennamen schreiben könnten Sie

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

Oder einfach 'getClass()' ohne 'this'. – lmichelbacher

+4

Dies setzt voraus, dass Sie sich nicht in einem statischen Kontext befinden. – flungo

2

verwenden, wenn Sie von der statischen Methode aufrufen, zu verwenden:. TestGameTable.class.getClassLoader() getResource ("dice.jpg") ;

+1

was ist, wenn andere als statische Methode aufrufen? – manetsus

1

Eine Sache zu beachten ist, dass der relevante Pfad hier der Pfad relativ zum Dateisystemstandort Ihrer Klasse ist ... in Ihrem Fall TestGameTable. Klasse. Es bezieht sich nicht auf den Speicherort der TestGameTable. java Datei.
Ich habe eine detailliertere Antwort hier ... where is resource actually located

Verwandte Themen