[英]How do i get only the necessary information from an Exception?
我想在程序中進行廣義的異常處理。 它應該顯示一個JOptionPane.showMessageDialog(null, "There was an unexpected Exception: ");
喜歡這個。 現在,我還想在對話框中添加必要的信息。 我知道如何獲取異常的類型( e.getClass();
),但是有一種方法只能獲取諸如哪種類/方法和哪一行信息嗎?
例外示例: at com.mainfirst.bloomberg.invoice.report.Etst.main(Etst.java:35)
我只想將零件放在方括號內。 我嘗試了Thread.currentThread().getStackTrace()[2].getLineNumber()
在類似問題中發現的問題 ,但是返回null,所以我嘗試使用其他索引,索引1返回Thread.currentThread()...
已寫入。是否可以檢索我需要的信息?
Pattern p = Pattern.compile("/\([\w\W]*\)/");
Matcher m = p.matcher(e.printStackTrace());
JOptionPane.showMessageDialog(null, "There was an unexpected Exception: "+m.group(1))
編輯:
使用e.getStackTrace()
而不是e.printStackTrace()
,因此您可以將異常消息作為字符串獲取。
使用m.group(0)而不是m.group(1)來匹配整個正則表達式。 在這種情況下,它會產生相同的效果,但是如果您在正則表達式中有更多的組,則可以選擇要匹配的組。
該特定的正則表達式僅匹配第一個匹配項,因為它的末尾沒有/ g修飾符。
但這返回了null,所以我嘗試使用其他索引,並且索引1返回Thread.currentThread()...的行,寫在
這是因為您使用的是Thread.currentThread()。getStackTrace()而不是e.getStackTrace() 。 獲取行號,如下所示:
try{
method();
}
catch(Exception e){
e.getStackTrace()[0].getLineNumber();
e.getStackTrace()[0].getFileName();
e.getStackTrace()[0].getMethodName();
}
它將打印發生的行號異常,下一個索引指向鏈中的外部方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.