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(images [0]);, и это дает мне исключение с нулевым указателем. Этот код здесь отлично.
Изменить: Изменено перемещено if (! file.exists()), как было предложено, и завернуло файл во входной поток.
Ответы
Ответ 1
ImageIO.read(файл); вернет значение 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, а затем передать его в read()
Ответ 2
ImageIO.read(*...)
загружает только эти типы изображений GIF, PNG, JPEG, BMP и WBMP.
Любой другой тип изображения будет возвращать null
без ошибок.
ссылка:
http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html
Я понимаю, что это не решение конкретной исходной проблемы, но это решение поставленного вопроса.
Ответ 3
Попробуйте включить InputStream в BufferedInputStream:
fis = new FileInputStream (файл); == > новый BufferedInputStream (новый FileInputStream (файл));