JAVA + try catch(FileNotFoundException e)进入catch(Exception e)?

时间:2011-05-05 13:42:07

标签: java try-catch filenotfoundexception

我有一些在磁盘上创建文件的命令。 因为必须在其中创建文件的文件夹是动态的,所以我有一个catch(FileNotFoundException e)。在同一个try块中,我已经有了一个catch(Exception e)块。 出于某种原因,当我运行我的代码并且该文件夹尚不存在时,使用了catch(Exception e)块,而不是FileNotFoundException块。

调试器很清楚(至少对我来说),显示FileNotFoundException:java.io.FileNotFoundException:c:\ mydata \ 2F8890C2-13B9-4D65-987D-5F447FF0DDA7 \ filename.png(系统找不到路径指定)

知道它为什么不进入FileNotFoundException块吗? 感谢;

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

2 个答案:

答案 0 :(得分:5)

您遇到的具体问题也可能不是FileNotFoundException。通过在catch块(它是所有异常的父类)中使用“Exception”,这实际上是一个“全部捕获”,因为如果存在“Exception或其任何子类抛出它将运行它。”

请尝试以下更改:

...

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

这将告诉您此块捕获的异常的特定类。我敢打赌,你会发现Exception实际上是一个子类的实例(例如IOException)。

答案 1 :(得分:0)

你的问题是FileNotFoundException被抛到java库的深处,而不是传播,所以你无法捕获它。 这里真正的罪魁祸首是来自

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

呼叫。这个会进入您的catch (Exception e)区块 如果在常规异常捕获之前添加catch (NullPointerException e)块,您将看到它在那里。