2011-05-05 80 views
6

我有一些命令,它在磁盤上創建一個文件。 因爲要創建文件的文件夾是動態的,所以我有一個catch(FileNotFoundException e)。在同一個try塊中,我已經有一個catch(Exception e)塊。 出於某種原因,當我運行我的代碼並且文件夾尚不存在時,使用catch(Exception e)塊,而不是FileNotFoundException。JAVA + try catch(FileNotFoundException e)進入catch(異常e)?

調試器是明確的,但(至少對我來說),呈現出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; 
} 
+3

如果您發佈實際存在問題的代碼段,這將會很有幫助。另外請確保您正在導入的FileNotFoundException與正在引發的FileNotFoundException相同。偶爾你的IDE可能會導入錯誤的軟件包,如果你的類路徑中還有一個FileNotFoundException異常的庫。不太可能,但首先排除這一點很重要。 – Jberg 2011-05-05 14:05:54

+0

請張貼代碼和stacktrace以及。 – Bhushan 2011-05-05 14:29:36

+0

這應該起作用。使用@normalocity建議的確認異常類名稱。我敢冒險猜測它可能是一個普通的IOException。 – JustinKSU 2011-05-05 15:51:54

回答

4

這也有可能是你遇到的具體問題是不是一個FileNotFoundException異常。通過在catch塊(這是所有異常的父類)中使用「Exception」,這實際上是「全部捕獲」,因爲如果拋出了「Exception或其任何子類」,它將運行。

請嘗試以下變化:

... 

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

這會告訴你具體的類異常的該塊被抓。我敢打賭你會發現Exception實際上是一個子類的實例(例如IOException)。

0

你的問題是FileNotFoundException在java庫內部的某個地方被拋出,並沒有傳播出去,所以你不能捕獲它。 這裏真正的罪魁禍首是一個NullPointerException從

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

呼叫始發。這個會碰到你的catch (Exception e)區塊。
如果在普通異常捕獲之前添加catch (NullPointerException e)塊,則會看到它在那裏。