2010-04-07 10 views
41

Necesito obtener un archivo de imagen de recursos en un proyecto de Java. Lo que estoy haciendo es:Obtener un recurso con getResource()

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

estructura El directorio es la siguiente:

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

El hecho es que siempre me sale como no existe el archivo. He intentado muchos caminos diferentes, pero no pude resolver el problema. ¿Alguna pista?

Respuesta

79
TestGameTable.class.getResource("/unibo/lsb/res/dice.jpg"); 
  • barra inicial para denotar la raíz de la ruta de clase
  • barras inclinadas en lugar de puntos en el camino
  • puede llamar getResource() directamente en la clase.
+3

¡Hasta el punto! (15ch) – BalusC

+4

Solo tenga en cuenta que 'Class # getResource' y' ClassLoader # getResource' utilizan diferentes estrategias para asignar el nombre a una ubicación. El ejemplo de LucaB realmente usa el ClassLoader de Class ('SomeClass.class.getClass()'), pero eso es probablemente un error y no a propósito. – jarnbjo

+0

@jambjo sí, asumí que es un error. – Bozho

9

En lugar de escribir explícitamente el nombre de la clase que usted podría utilizar

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

O simplemente 'getClass()' sin 'this'. – lmichelbacher

+4

Esto supone que no se encuentra dentro de un contexto estático. – flungo

2

si llama desde método estático, utilice:. TestGameTable.class.getClassLoader() getResource ("dice.jpg") ;

+1

¿qué tal si se llama aparte de un método estático? – manetsus

1

Una cosa a tener en cuenta es que la ruta relevante aquí es la ruta relativa a la ubicación del sistema de archivos de su clase ... en su caso TestGameTable. clase. No está relacionado con la ubicación de TestGameTable. java archivo.
Dejé una respuesta más detallada aquí ... where is resource actually located

Cuestiones relacionadas