2011-04-24 311 views
10

estoy siguiendo el zetcode Snake java games tutorial y siempre sale este error:Java getClass() getResource ("archivo") conduce a NullPointerException

ImageIcon iid = new ImageIcon(this.getClass().getResource("ball.png")); 
ball = iid.getImage(); 

Exception in thread "main" java.lang.NullPointerException 
    at javax.swing.ImageIcon.<init>(Unknown Source) 
    at snake2.Board.<init>(Board.java:52) 
    at snake2.Snake.<init>(Snake.java:10) 
    at snake2.Snake.main(Snake.java:22) 

que en realidad sólo copiar y pegar el código para ver cómo funciona. También están en los paquetes correctos; pero cuando intento ejecutarlo, siempre termino con este error.

+2

¿Hay un archivo ball.png junto al archivo .java? En caso de que esté usando eclipse, ¿actualizó la carpeta de origen? ¿El código anterior se llama desde un método de subclases en un paquete diferente? –

+0

lo importé en el lugar equivocado. Creo que importarlo en el proyecto lo agrega a los recursos. ¿Qué tal si agrego recursos globalmente, como si quisiera agregar D: \ myresources \ a mi proyecto – kapitanluffy

Respuesta

-2

No se encontró el recurso así nombrado. Debe estar en el mismo directorio que el archivo .class del que lo está llamando. Ver el Javadoc.

+0

, entonces con eso quiere decir que debería agregar ball.png al recurso? ¿Cómo? – kapitanluffy

+0

@kapitanluffy: Parece que está utilizando la API de recursos sin saber a primera vista para qué sirve. Te sugiero que leas el Javadoc. – EJP

+1

@downvoter Por favor explique – EJP

2

Es en general riesgoso para cargar los recursos que utilizan rutas relativas, yo siempre recomiendo usar rutas absolutas, por lo que

/ball.png 

si la imagen es en la raíz de la ruta de clases, o añadir una ruta de acceso a La locación.

0

si el recurso está en su classpath, entonces debería probar "this.getClass(). GetClassLoader(). GetResource (" ball.png ")". Para que el código real funcione, ball.png debe estar en la ubicación donde está su archivo .class (es decir, dentro del paquete).

+0

Estas dos oraciones son mutuamente contradictorias. El uso del método de carga de clases pierde la información sobre dónde se encuentra el archivo .class. – EJP

12

La imagen debe estar en el mismo paquete (carpeta en términos de SO) que la clase compilada. Compruebe si tiene ambos .class y .png en la misma carpeta. Si no, puede utilizar rutas de ruta de clases relativa en getResource(..), comenzando con /

6

Prueba esto:

ImageIcon iid = new ImageIcon(this.getClass() 
        .getClassLoader().getResource("ball.png")); 
ball = iid.getImage(); 

Asegúrese de que la imagen está en la misma carpeta que el archivo java.

1

Tienes que poner el archivo de imagen (ball.png) en tu classpath. Más detalles, echa un vistazo a the Javadoc.

4

Pruebe usar System.out.println(System.getProperty("java.class.path")); para encontrar la ubicación de su archivo .class y coloque las imágenes en esta carpeta.

-1

Ir al proyecto> limpiar en el eclipse, actualizaría el explorador de paquetes y ya no se enfrentará a este problema.

0

Es posible que deba agregar el archivo a sus recursos de construcción, algo como esto:

<build> 
    <resources> 
     <resource> 
      <directory>path\to\resources</directory> 
      <includes> 
       <include>ball.png</include> 
      </includes> 
     </resource> 
    </resources> 

0

Sólo se puede utilizar ruta de la imagen. Creo que esto le ayudará a: Utilice esta :

ImageIcon iid = new ImageIcon("C:\\Users\\ranig\\My\\spaceinvaders\\ball.png"); 

Nota:C:\\Users\\ranig\\My\\spaceinvaders\\ball.png es todo el camino de ball.png imagen.

en lugar de esto:

ImageIcon iid = new ImageIcon(this.getClass().getResource("ball.png")); 

Nota: Si quieres sólo para probar código de serpiente y sólo desea obtener una salida.

0

Lo haré simple para usted.Aquí está un ejemplo:

Icon bug = new ImageIcon(getClass().getResource("bug1.png")); 

aquí "bug1.png" es el recurso y si no está disponible entonces puede causar errores a medida que han discutido aquí.

importar una imagen en el mismo directorio en el que reside el programa.

También puede dar trayectoria entera a él también

ImageIcon(getClass().getResource("C://me/file/bug1.png")); 
Cuestiones relacionadas