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 (файл));