ImageIO.read结果为null

时间:2014-02-26 08:51:37

标签: java null bufferedimage javax.imageio

需要帮助。我正在做一个将图片合二为一的程序。我正在使用Windows的示例图片进行测试,它工作正常。我的问题是,我有一个图像,导致NullPointerException。这是我的代码。

int imageHeight = 0;  
List<Integer> widthList = new ArrayList<Integer>();
List<Integer> chunkHeight = new ArrayList<Integer>();

File[] imgFiles = new File[chunks]; 
for (int x = 0; x < chunks; x++) {  
    imgFiles[x] = new File(tempDirectory + newFileName + (x + 1) + ".png");
} 

BufferedImage[] buffImages = new BufferedImage[chunks];
for (int i = 0; i < chunks; i++) {  
    buffImages[i] = ImageIO.read(imgFiles[i]);
    chunkHeight.add(buffImages[i].getHeight());
    imageHeight = imageHeight + buffImages[i].getHeight();
    widthList.add(buffImages[i].getWidth());
} 

我在BufferedImage的getHeight()中遇到了NullPointer问题。我唯一的发现就是当我在Photoshop中打开图像时,我收到错误“无法完成您的请求,因为文件格式模块无法解析文件。”。感谢。

编辑: 这是我使用的图像链接:http://www.mediafire.com/download/5bx322a08c29uae/image2.png

2 个答案:

答案 0 :(得分:1)

  

我收到错误“无法完成您的请求,因为   文件格式模块无法解析文件。“

正如你所说,它可能是一个损坏的文件。只是为了检查我做了一些测试,比如将.txt文件更改为.png,然后运行此代码。

BufferedImage b = null;
try {
    b = ImageIO.read(new File("C:\\Users\\uysers\\Desktop\\so.png"));
    System.out.println(b.getHeight());
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

以下行没有问题

b = ImageIO.read(new File("C:\\Users\\uysers\\Desktop\\so.png"));

而这一行

System.out.println(b.getHeight());我得到了一个nullpointer异常。所以我会说你有一个损坏的图像文件,它使缓冲图像为空。

答案 1 :(得分:1)

ImageIO.read如果无法识别文件格式,则返回null。这是记录在案的行为,因此您应始终测试来自null的{​​{1}}返回值。

这就是为什么在要求高度/宽度时得到ImageIO.read

由于Photoshop无法读取,因此很可能不是PNG文件,或文件已损坏。

您可以使用以下方法轻松修复代码:

NullpointerException

PS:我的Windows示例图像文件夹只包含JPEG,也许您可​​以发布到损坏图像的链接?