我有一些在磁盘上创建文件的命令。 因为必须在其中创建文件的文件夹是动态的,所以我有一个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;
}
答案 0 :(得分:5)
您遇到的具体问题也可能不是FileNotFoundException。通过在catch块(它是所有异常的父类)中使用“Exception”,这实际上是一个“全部捕获”,因为如果存在“Exception或其任何子类抛出它将运行它。”
请尝试以下更改:
...
catch (Exception e) {
System.out.println(e.getClass());
}
...
这将告诉您此块捕获的异常的特定类。我敢打赌,你会发现Exception实际上是一个子类的实例(例如IOException)。
答案 1 :(得分:0)
你的问题是FileNotFoundException被抛到java库的深处,而不是传播,所以你无法捕获它。 这里真正的罪魁祸首是来自
的NullPointerExceptionImageIO.write(image, "png", new File(fileName));
呼叫。这个会进入您的catch (Exception e)
区块
如果在常规异常捕获之前添加catch (NullPointerException e)
块,您将看到它在那里。