2012-03-30 16 views
15

Parece que el siguiente código no funciona, aunque parece que el archivo se encuentra muy bien.ImageIO.read devuelve NULL, sin errores

images = new BufferedImage[32]; 
    FileInputStream fis = null; 
    for (int i = 0; i < 32; i++) { 
     File file = new File("tiles\\"+i+".bmp"); 
     if (!file.exists()){ 
      System.out.println("File "+i+" failed"); 
     } 
     try { 
      fis = new FileInputStream(file); 
     } catch (FileNotFoundException e) { 
      System.err.println(e + "" + i); 
     } 
     try { 
      images[i] = ImageIO.read(fis); 
     } catch (IOException e) { 
      System.err.println(e + "" + i); 
     } 
     if (images[i] == null) { 
      System.out.println("Image "+i+" failed"); 
     } 
    } 

Gracias de antemano por cualquier ayuda.

Editar: El resultado es que intento Graphics.drawImage (images [0]) ;, y me da una excepción de puntero nulo. Este código aquí completa bien.

Editar: Se modificó el archivo if (! File.exists()) modificado, como se sugirió, y se envolvió el archivo en una secuencia de entrada.

+3

[RTFM] (http://docs.oracle.com/javase/7/docs/api/javax/imageio/ImageIO.html#read%28java.io.File%29) – mre

+0

¿Podría describir el resultado? Una suposición descabellada: la ruta en incorrecto ... –

+0

¿Por qué no pones tu prueba si (! File.exists()) System.out.println ("Archivo" + i + "falló"); antes de la lectura? –

Respuesta

7

ImageIO.read (archivo); devolverá nulo si no se encuentra ImageReader no se encuentra. Compruebe si ha registrado ImageReader o no.

creo que este fragmento de código podría ayudarle a

File file = new File("bear.jpg"); // I have bear.jpg in my working directory 
    FileInputStream fis = new FileInputStream(file); 
    BufferedImage image = ImageIO.read(fis); //reading the image file 

Sólo tiene que envolver el archivo en una FileInputStream y luego pasarlo a lectura()

+0

Probablemente aún no estoy haciendo esto correctamente, pero lo que sí hice fue infructuoso. Cambié el código de arriba para mostrar lo que ha cambiado. – Naberius

+0

¿Puedes decirnos cuáles son los nombres de tus archivos de imagen en el disco? –

+0

@Naberius ¿Puede decirnos cuáles son sus nombres de archivo de imagen en el disco? Está funcionando perfectamente en mi caso. –

0

Intenta que envuelva InputStream en BufferedInputStream:

fis = new FileInputStream (archivo); ==> new BufferedInputStream (new FileInputStream (archivo));