2012-08-24 25 views
6

Al crear objetos de clase ImageIcon que uso el siguiente código:Cómo utilizar getClass() getResource() método

iconX = new ImageIcon (getClass().getResource("imageX.png")) 

El código anterior funciona correctamente, ya sea en un applet o una computadora de escritorio aplicación cuando el .png está en la misma carpeta de la clase.

La pregunta es: ¿cómo evitar un NullPointerException cuando el .Png está en otra carpeta? ¿O cómo cargar la imagen en el objeto ImageIcon cuando está en una ubicación diferente a la clase?

No entiendo cómo funciona este método, si alguien puede ayudarme, lo agradezco. ¡¡Gracias!!

Respuesta

1

Simplemente proporcione la ruta al recurso.

Por lo tanto, si se pone la imagen en "/ resources/images" dentro de su tarro, sólo tendría que utilizar

iconX = new ImageIcon(getClass().getResource("/resources/images/imageX.png")) 

Esencialmente lo que estás diciendo es, cargador de clases, por favor busque la ruta de clase para el siguiente recurso.

1

Si la imagen es interna (que quieren una ubicación con respecto a su proyecto, o tal vez empaquetados en su frasco), hacer lo que dijo el programador loco:

iconX = new ImageIcon(getClass().getResource("/path/imageX.png")) 

La ruta es relativa, por lo ruta/será una carpeta en la misma carpeta que su proyecto (o empaquetada en su jar).

Si desea una imagen externa, simplemente dele a ImageIcon constructor la ruta (por ejemplo, "C: /.../ file.png"). Sin embargo, esto no es recomendable, ya que es mejor usarlo como recurso.

Para obtener más información sobre el constructor ImageIcon, consulte here. para obtener más información sobre los recursos de la clase de carga, ver here (enlaces Javadoc)

+0

Ok Tiene razón sobre la carpeta de recursos, es mejor así. Probé la ruta completa del archivo en una carpeta diferente al classpath y también obtuve un nullPointerExceptioin. Utilizo el siguiente código: imageX = new ImageIcon (getClass(). GetResource ("C: /Users/JP/Desktop/applet/iconX.png")); y no funciona! – user1621598

4

Tome un vistazo a esto - Class#getResource(java.lang.String)

Por favor, haga clic en el enlace anterior y leer la documentación y seguimiento de entender lo que está pasando.

Dice -

Si el nombre comienza con A, entonces el nombre '/' absoluta del recurso es la parte del nombre después de la '/'.

y

De lo contrario, el nombre absoluta es de la siguiente forma:

 modified_package_name/name 

Cuando el modified_package_name es el nombre del paquete de este objeto con '/' sustituido de ' . '.

lo tanto, si este objeto (donde se llama a getResource) se encuentra en el paquete /pkg1 (/ significa paq1 está justo debajo de la raíz de la ruta de clase) y que utiliza "imageX.png" entonces el resultado sería pkg1/imageX.png que es correcto porque ahí es donde se encuentra la imagen.

Pero, si cambiamos el recurso (imageX.png) a algún otro paquete /pkg2 y llamados de la misma manera método entonces el resultado sería todavía pkg1/imageX.png pero esta vez sería incorrecto porque el recurso se encuentra realmente en /pkg2 . Entonces es cuando terminas con NPE.

Es bueno especificar explícitamente la ruta completa del recurso comenzando desde la raíz del classpath. (por ejemplo, "/pkg/imageX.png").

Espero que esto ayude.

+0

De hecho, ayuda. Gracias, entiendo cómo funciona el método. – user1621598

Cuestiones relacionadas