2010-10-19 138 views
1

的代碼繼續我的應用程序:當發生異常

String[] logs={"a","b","c"}; 
int errors=0; 
for(String str:logs){ 
    try{ 
    LogParser.parse(str); 
    } catch(ParseException e){ 
    error++; 
    continue; // Seems that, this two line codes are not reached. 
    } 
} 

在上面的代碼中,LOGPARSER的用於分析相結合模式的Tomcat的日誌,當獲取日期格式的數據,我用的是SimpleDateFormat的解析它到一個Java.Util.Date對象,那麼它可能會拋出一個ParseException.the日誌數組這裏只是用於拋出異常。

但是,當解析一個日誌時出現這個異常時,應用程序將退出,我希望它繼續下一個日誌。

如何製作它?

我已經閱讀教程:

http://download.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html

它表示Error和RuntimeException不是主try try塊,應用程序將退出。

但java.text.ParseException擴展了Exception,爲什麼它不能服從我的try-catch塊? 由於「錯誤」變量不要+1,

我也想過用這個:

是的,它的工作原理,但是當日志被正確解析,錯誤將還可以添加,它不應該。

任何人都可以告訴我爲什麼嗎?

+0

你確定它是一個ParseException嗎?應用程序退出時應該包含堆棧跟蹤,包括異常類名稱。 – Thilo 2010-10-19 01:42:56

+0

您使用哪種LogParser?檢查它的文檔或源代碼,如果你有權限查看它是否在異常時用System.exit()退出。 – 2010-10-19 02:12:21

回答

5

您正在捕獲ParseException,但可能會引發另一種異常類型。試着用(Exception e)替換這個,看看你扔的是什麼類型。然後,您可以將catch的範圍縮小爲適當的異常類型。

String[] logs={"a","b","c"}; 
int errors=0; 
for(String str:logs){ 
    try{ 
    LogParser.parse(str); 
    } catch(Exception e){ // <-- try this 
    error++; 
    continue; 
    } 
} 
+0

或捕獲Throwable來代替調試目的... – pstanton 2010-10-19 02:16:29

+0

但僅用於調試目的!從來沒有抓住其他方面的Throwable;如果你做了 – naiad 2010-10-19 02:52:31

+0

就可以得到一些令人討厭的錯誤。在找出問題後,您需要將範圍縮小到我剛纔提到的適當類型。 – Alex 2010-10-19 02:53:46

3

Alex是正確的。該計劃正在拋出一種不同類型的例外情況,而不是您想要捕捉的ParseException。然而,不要捕捉Exception e,你可以嘗試捕捉多個例外,從最具體的開始。例如:

String[] logs={"a","b","c"}; 
    int errors=0; 
    for(String str:logs){ 
     try{ 
     LogParser.parse(str); 
     } catch(ParseException e){ 
     error++; 
     continue; 
     } 
     catch(Exception e){ 
     //Code to catch generic exception 
     } 
    } 

你可以有很多的catch語句,只要你想,但請記住,匹配將被如此使用的第一個不把catch(Exception e)第一。