LPeter1997
LPeter1997

Reputation: 17

Java input == null why?

I'm using a simple way to get my resources for the project. I'm using Eclipse, and I have a 'res' folder to hold the needed files. This is how I load stuff, for example a 'puppy.png' just in my res folder (no subfolders):

String path = "/puppy.png";
try {
    BufferedImage image = ImageIO.read(getClass().getResourceAsStream(path));
} catch(Exception ex) { ex.printStackTrace(); }

And sometimes I get an input==null error, and sometiomes not! Not like this time puppy.png loaded but next time it won't. For some classes it always loads correctly, and for the other classes I always get this error. Can anyone explain why can this happen, and how can I fix it, but still use the getResourceAsStream() method?

Upvotes: 0

Views: 372

Answers (2)

Rogue
Rogue

Reputation: 11483

Note that if the resource returns null (meaning it doesn't exist), you will get this error.

Check the input returned like so:

String path = "/puppy.png";
try {
    InputStream is = getClass().getResourceAsStream(path);
    if (is == null) {
        //resource doesn't exist
    } else {
        BufferedImage image = ImageIO.read(is);
    }
} catch(Exception ex) { ex.printStackTrace(); }

Note that you most likely should be using String path = "puppy.png", seeing as you will already be in the content of the project folder.

Upvotes: 0

Braj
Braj

Reputation: 46841

Please have a look at How to retrieve image from project folder?.

I have mentioned no of ways to read image from different paths.

You can try any one

// Read from same package 
ImageIO.read(getClass().getResourceAsStream("c.png"));

// Read from absolute path
ImageIO.read(new File("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\c.png"));

// Read from images folder parallel to src in your project
ImageIO.read(new File("images\\c.jpg"));

In your case the image must be in the same package where is the class and don't prefix /.

Upvotes: 1

Related Questions