ImageIO.read возвращает NULL, без ошибок - PullRequest
17 голосов
/ 30 марта 2012

Следующий код, похоже, не работает, хотя файл, кажется, найден просто отлично.

    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 ()), как предложено, и поместило файл во входной поток.

Ответы [ 3 ]

33 голосов
/ 31 марта 2013

ImageIO.read(*...) будет загружать только эти типы изображений GIF , PNG , JPEG , BMP и WBMP .

Любой другой тип изображения вернет null без ошибки.

ссылка: http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html

Я понимаю, что это не решение конкретной исходной проблемы, а решение заданного вопроса.

8 голосов
/ 30 марта 2012

ImageIO.read (файл); вернет ноль, если не будет зарегистрировано 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 ()

0 голосов
/ 14 октября 2014

Попробуйте обернуть ваш InputStream в BufferedInputStream:

fis = new FileInputStream (file);==> new BufferedInputStream (новый FileInputStream (файл));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...