2010-10-19 79 views
3

我有以下代碼:使用DOMConfigurator時無法捕獲FileNotFoundException

try { 
    DOMConfigurator.configure(url+log4j.xml); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 

如果log4j.xml不存在,我希望FileNotFoundException,然後執行catch-block。

但是當文件不存在時我沒有看到異常,爲什麼會這樣?

+0

你的意思是FileNotFoundException異常小號拋出,而不是陷入catch塊? – 2010-10-19 10:18:10

回答

2

如果你看看the source of DOMConfigurator.doConfigure它看起來像捕獲了Exception然後只記錄錯誤而不是重新拋出它。因此FileNotFoundException將不會回到您的調用代碼。

try { 
... 
} catch (Exception e) { 
    if (e instanceof InterruptedException || e instanceof InterruptedIOException) { 
     Thread.currentThread().interrupt(); 
    } 
    // I know this is miserable... 
    LogLog.error("Could not parse "+ action.toString() + ".", e); 
} 

要解決此問題,您可以預先檢查文件是否存在。

+0

好的,我會這麼做的。謝謝 – juanasecas 2010-10-19 12:45:25

0

嘗試捕捉Throwable而不是Exception並執行打印堆棧跟蹤。這樣你就可以捕獲任何錯誤或異常,並相應地更改你的代碼。

0

在要禁用從log4j的這些消息的情況下,你可以在安靜模式下設置的log4j:

LogLog.setQuietMode(true); 
相關問題