ImageIO.read 返回 NULL,没有错误

问题描述 投票:0回答:5

以下代码似乎不起作用,即使该文件看起来很好找到。

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())
,并将文件包装在输入流中。

java image
5个回答
50
投票

ImageIO.read(*...)
将仅加载这些图像类型 GIFPNGJPEGBMPWBMP

任何其他图像类型都将返回

null
,不会出现错误。

参考: http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html

我确实意识到这不是特定原始问题的解决方案,但它是所提出问题的解决方案。


10
投票

ImageIO.read(file); 如果没有找到注册的 ImageReader 将返回 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()


0
投票

添加以下依赖项:

<dependency>
        <groupId>com.github.jai-imageio</groupId>
        <artifactId>jai-imageio-core</artifactId>
        <version>1.4.0</version>
    </dependency>
    <dependency>
        <groupId>com.github.jai-imageio</groupId>
        <artifactId>jai-imageio-jpeg2000</artifactId>
        <version>1.4.0</version>
    </dependency>

-1
投票

尝试将 InputStream 包装到 BufferedInputStream 中:

fis = new FileInputStream(文件); ==> 新的 BufferedInputStream(新的 FileInputStream(文件));


-1
投票

使用

new File(getClass().getResource("tiles\\"+i+".bmp"));

© www.soinside.com 2019 - 2024. All rights reserved.