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;
}
matsev
  • 32,104
  • 16
  • 121
  • 156
user706058
  • 415
  • 3
  • 11
  • 23
  • 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. – Jberg May 05 '11 at 14:05
  • please post the code and the stacktrace as well. – Bhushan May 05 '11 at 14:29
  • That should work. Do what @normalocity suggested to confirm exception class name. I would venture to guess it might be a general IOException. – JustinKSU May 05 '11 at 15:51

2 Answers2

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

jefflunt
  • 33,527
  • 7
  • 88
  • 126
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.

Marco
  • 1,430
  • 10
  • 18