以下代码似乎无法正常工作,即使该文件看起来很好。
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(images [0]);,它给我一个空指针异常。这段代码完成得很好。
编辑:已更改按建议移动了if(!file.exists()),并将文件包装在输入流中。
答案 0 :(得分:33)
ImageIO.read(*...)
只会加载以下图片类型 GIF , PNG , JPEG , BMP ,和 WBMP 。
任何其他图片类型都会返回null
而不会出错。
参考: http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html
我确实知道这不是特定原始问题的解决方案,但它是问题的解决方案。
答案 1 :(得分:8)
ImageIO.read(file); 将返回null。请检查您是否注册了 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 中,然后将其传递给 read()
答案 2 :(得分:0)
尝试将InputStream包装成BufferedInputStream:
fis = new FileInputStream(file); ==&GT; new BufferedInputStream(new FileInputStream(file));