Problema al cargar una imagen en Java

Peinacabras

Buenas, tengo el siguiente codigo.

 public BufferedImage loadImage(String nombre){
            URL url = null;
            try{
                url = getClass().getClassLoader().getResource(nombre);
                return ImageIO.read(url);
            }catch(Exception e){
                System.out.println("No se pudo cargar la imagen " + nombre + " de"+ url);
                System.out.println("El error fue : "+e.getClass().getName()+ " "+e.getMessage());
                System.exit(0);
                return null;
            }
        }
        
public void paint(Graphics g){ BufferedImage prueba = loadImage("prueba.gif"); g.drawImage(prueba, 40, 40, this); }

Al ejecutar todo me da el siguiente error.
No se pudo cargar la imagen prueba.gif denull
El error fue : java.lang.IllegalArgumentException input == null!

La imagen esta almacenada dentro de la carpeta del proyecto(el codigo es desde Netbeans), decir que trabajo desde Mac y no estoy seguro si basta con poner la ruta de la imagen asi(Al estar contenida dentro del proyecto no es necesario definir mas, no?)

kraneok

Se supone que nombre lleva xxx.xx , donde xxx es nombre y .xx extensión, o solo lleva xxx?

1 respuesta
Peinacabras

#2 La imagen la he llamado prueba.gif, por lo tanto el formato es el primero que dices.

1 respuesta
kraneok

#3 Haz una cosa imprime url, a ver el path que sale.

1 respuesta
Peinacabras

#4 He imprimido el valor de null tras

url = getClass().getClassLoader().getResource(nombre);

y efectivamente, toma el valor null =/

2 respuestas
kraneok

#5 Pues ya sabes que el problema está cuando formas el path de la imagen, el resto debería estar bien.

1
kraneok

#5 De todas formas una cosa que puedes hacer es la siguiente.

Utilizando la clase File, instanciamos un objeto en ella con la url que formas y desde ahí vas a tener a multitud de funciones que te ayudarán a conocer el fichero, imagino que ya has utilizado File muchas veces, no tengo que decir mas. Es que a veces trabajamos a ciegas, pudiendo hacer una pequeña tontería y asegurarnos que hacemos las cosas bien, y por pereza podemos darnos cabezazos miles contra el teclado y no dar con la tecla xD

De todas formas si el getClassLoader() te hace falta, yo siempre he usado getClass().getResource( imgPath );

new ImageIcon(this.getClass().getResource("rana.gif"));

De aquí luego puedes obtener el getImage();

1 1 respuesta
Peinacabras

#7 El caso es que no entiendo como y donde utilizar el getImage() , el resto creo que si y es mi primera vez con esto de utilizar imagenes en panales en java asi que muy avanzado en esto no estoy aun.

1 respuesta
kraneok

#8

Image i = new ImageIcon( this.getClass().getResource("arbol.jpg")).getImage();
1 respuesta
Peinacabras

#9 Justo antes de leer tu mensaje lo solucione, gracias tio!

2 respuestas
kraneok

#10 Es lo suyo, que te des cuenta tu solo, así no se te olvida mas xD

bornex

#10 Se que lo tienes solucionado, pero también hay otra forma y es pasándole a ImageIO un File con la dirección de la imagen.

File file = new File(res/arbol.gif);
try{
     return ImageIO.read(file);
}
.
.
.

EDIT: Lo pongo porque puede resultarte mas cómodo trabajar con Files :P

1

Usuarios habituales

  • bornex
  • kraneok
  • Peinacabras