需要帮助。我正在做一个将图片合二为一的程序。我正在使用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
答案 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,也许您可以发布到损坏图像的链接?