2012-03-30 244 views
15

下面的代码似乎不起作用,即使该文件看起来很好。ImageIO.read返回NULL,没有错误

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"); 
     } 
    } 

在此先感谢您的帮助。

编辑:结果是我试图Graphics.drawImage(图像[0]);;它给了我一个空指针异常。这里的代码完成很好。

编辑:更改按照建议移动了if(!file.exists()),并将该文件包装在输入流中。

+3

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

+0

你能描述一下结果吗?一个疯狂的猜测:在不正确的路径... – 2012-03-30 13:36:59

+0

为什么你不把你的测试,如果(!file.exists())System.out.println(“文件”+ i +“失败”);在读之前是否有 ? – 2012-03-30 13:38:37

回答

7

ImageIO.read(file);如果没有注册,将返回null ImageReader找不到。请检查您是否注册了ImageReader

我觉得这个代码片段可以帮助你

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 

您只需将文件包装成一个的FileInputStream,然后将它传递给阅读()

+0

我可能仍然没有正确地做到这一点,但我所做的却是失败。我更改了上面的代码以显示更改内容。 – Naberius 2012-03-30 13:59:19

+0

你能说出你的磁盘中有什么图像文件名吗? – 2012-03-30 14:07:37

+0

@Naberius你能说你的磁盘中有什么图像文件名?这完全符合我的情况。 – 2012-03-30 14:16:14

0

尝试换你的InputStream到的BufferedInputStream:

FIS =新的FileInputStream(文件); ==> new BufferedInputStream(new FileInputStream(file));

相关问题