6

ディスク上にファイルを作成するコマンドがあります。ファイルを作成する必要があるフォルダーは動的であるため、catch(FileNotFoundException e) があります。同じ try ブロックに、すでに catch(Exception e) ブロックがあります。何らかの理由で、コードを実行したときにフォルダーがまだ存在しない場合、FileNotFoundException ブロックではなく、catch(Exception e) ブロックが使用されます。

FileNotFoundException: java.io.FileNotFoundException: c:\mydata\2F8890C2-13B9-4D65-987D-5F447FF0DDA7\filename.png (システムは指定されたパスを見つけることができません)

FileNotFoundException ブロックに入らない理由はありますか? ありがとう;

コード:

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

2 に答える 2

5

また、発生している特定の問題が FileNotFoundException ではない可能性もあります。catch ブロック (すべての Exception の親クラス) で "Exception" を使用すると、`Exception またはそのサブクラスのいずれかがスローされた場合に実行されるため、これは実質的に "すべてキャッチ" になります。

次の変更を試してください。

...

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

これにより、このブロックによってキャッチされる例外の特定のクラスがわかります。Exception が実際にはサブクラス (IOException など) のインスタンスであることがわかると思います。

于 2011-05-05T14:40:41.877 に答える
1

あなたの問題は、 FileNotFoundException がJavaライブラリの奥深くにスローされ、伝播されないため、キャッチできないことです。ここでの本当の原因は、から発生した NullPointerException です。

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

電話。これはあなたのcatch (Exception e)ブロックにぶつかります。
一般的な Exception キャッチの前にブロックを追加するcatch (NullPointerException e)と、そこにブロックが入っていることがわかります。

于 2013-04-29T19:34:04.823 に答える