2010-04-07 17 views
41

Ho bisogno di ottenere un file immagine risorsa in un progetto java. Quello che sto facendo è:Ottenere una risorsa utilizzando getResource()

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

struttura La directory è la seguente:

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

Il fatto è che ho sempre come il file non esiste. Ho provato molti percorsi diversi, ma non ho potuto risolvere il problema. Qualche suggerimento?

risposta

79
TestGameTable.class.getResource("/unibo/lsb/res/dice.jpg"); 
  • conduce barra per indicare la radice del classpath
  • slash invece di punti nel percorso
  • è possibile chiamare getResource() direttamente sulla classe.
+3

Al punto! (15ch) – BalusC

+4

Ricorda che 'Class # getResource' e' ClassLoader # getResource' stanno utilizzando strategie diverse per mappare il nome in una posizione. L'esempio di LucaB utilizza effettivamente ClassLoader dalla classe ('SomeClass.class.getClass()'), ma probabilmente è un errore e non di proposito. – jarnbjo

+0

@jambjo sì, ho pensato che fosse un errore. – Bozho

9

Invece di scrivere esplicitamente il nome della classe è possibile utilizzare

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

Oppure semplicemente 'getClass()' senza 'this'. – lmichelbacher

+4

Si presume che non ci si trovi in ​​un contesto statico. – flungo

2

se si chiama dal metodo statico, l'uso:. TestGameTable.class.getClassLoader() getResource ("dice.jpg") ;

+1

cosa dire se si chiama diverso dal metodo statico? – manetsus

1

Una cosa da tenere a mente è che il percorso pertinente qui è il percorso relativo al percorso del file system della classe ... nel tuo caso TestGameTable. classe. Non è correlato alla posizione di TestGameTable. java file.
Ho lasciato una risposta più dettagliata qui ... where is resource actually located

Problemi correlati