JAVA + try catch(FileNotFoundException e) going in catch(Exception e)?
Asked Answered
E

2

7

I have some command which creates a file on disk. Because the folder in which the file has to be created is dynamic, I have a catch(FileNotFoundException e). In the same try block, I already have a catch(Exception e) block. For some reason, when I run my code and the folder does not exists yet, the catch(Exception e) block is used, not the FileNotFoundException one.

The debugger is clear though (to me at least), showing a FileNotFoundException: java.io.FileNotFoundException: c:\mydata\2F8890C2-13B9-4D65-987D-5F447FF0DDA7\filename.png (The system cannot find the path specified)

Any idea why it doesn't go into the FileNotFoundException block? Thanks;

CODE:

import java.io.FileNotFoundException;

try{
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Rectangle screenRectangle = new Rectangle(screenSize);
    Robot robot = new Robot();
    BufferedImage image = robot.createScreenCapture(screenRectangle);
    ImageIO.write(image, "png", new File(fileName));
}
catch (FileNotFoundException e){
    // do stuff here..
    return false;
}
catch(Exception e){
    // do stuff here..
    return = false;
}
Espinosa answered 5/5, 2011 at 13:42 Comment(3)
It would be helpful if you post the actual code snippet you're having the problem with. Also make sure the FileNotFoundException you're importing is the same one that's being thrown. Occasionally your IDE might import the wrong package if there is another library on your class path which also has a FileNotFoundException. Not likely, but it's important to rule that out first.Foray
please post the code and the stacktrace as well.Floriated
That should work. Do what @normalocity suggested to confirm exception class name. I would venture to guess it might be a general IOException.Forceful
R
5

It's also possible that the specific issue you're having isn't a FileNotFoundException. By using the "Exception" in a catch block (which is the parent class to all Exceptions) this is effectively a "catch all", since it will run if there is an `Exception or any of its subclasses thrown.

Try the following change:

...

catch (Exception e) {
  System.out.println(e.getClass());
}
...

This will tell you the specific class of the Exception being caught by this block. I'll bet you'll find that the Exception is actually an instance of a subclass (such as IOException, for example).

Rattan answered 5/5, 2011 at 14:40 Comment(0)
V
1

Your problem is that the FileNotFoundException is thrown somewhere deep inside the java library and not propagated up so you cannot catch it. The real culprit here is a NullPointerException originating from the

ImageIO.write(image, "png", new File(fileName));

call. This one runs into your catch (Exception e) block.
If you add a catch (NullPointerException e) block before your general Exception catch, you will see it going in there.

Villiform answered 29/4, 2013 at 19:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.