簡體   English   中英

我如何僅從異常中獲取必要的信息?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM