Naberius
Naberius

Reputation: 255

ImageIO.read returns NULL, with no errors

The following code seems not to work, even though the file appears to be found just fine.

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");
    }
}

Edit: The result is me attempting to Graphics.drawImage(images[0]);, and it giving me a null pointer exception. This code here completes fine.

Edit: Changed moved the if(!file.exists()) as suggested, and wrapped the file in an input stream.

Upvotes: 22

Views: 44869

Answers (5)

AM13
AM13

Reputation: 683

Add the following dependencies:

<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>

Upvotes: 0

Rajeev
Rajeev

Reputation: 325

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

Upvotes: -1

Chandra Sekhar
Chandra Sekhar

Reputation: 19500

ImageIO.read(file); will return null if no registered ImageReader is found. Please check whether you have registered any ImageReader.

I think this code snippet could help you

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  

You just need to wrap the file into an FileInputStream and then pass it to read()

Upvotes: 10

Ahmed MANSOUR
Ahmed MANSOUR

Reputation: 2559

Try wrap you InputStream into BufferedInputStream:

fis = new FileInputStream(file); ==> new BufferedInputStream(new FileInputStream(file));

Upvotes: -1

Irrationalkilla
Irrationalkilla

Reputation: 602

ImageIO.read(*...) will only load these image types GIF, PNG, JPEG, BMP, and WBMP.

Any other image type will return null without error.

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

I do realize this is not a solution to the specific original problem but it is a solution to the question asked.

Upvotes: 50

Related Questions