2012-07-24 115 views
0

我們的目標是能夠做到:有沒有辦法讓我拋出異常而不打印堆棧跟蹤?

throw new RuntimeException(); 

沒有它打印:

Exception in thread "main" java.util.RuntimeException 
at grame.GrameManager.add(GrameManager.java:40) 
at grame.GrameManager.add(GrameManager.java:47) 
at grame.Entity.<init>(Entity.java:56) 
at grame.Entity.<init>(Entity.java:28) 
at test.Test.main(Test.java:20) 

(例如)。

這可能嗎?如果是這樣,我將如何去做這件事?

+4

1.抓住它2.忽略它。 – assylias 2012-07-24 16:27:11

+0

你爲什麼要這樣做?這通常不是一件好事 – 2012-07-24 16:30:09

+0

我應該詳細闡述我的意圖。我正在製作一個異常捕獲器,它在一個整潔的GUI中顯示問題,甚至讓用戶通過電子郵件發送日誌。事情是,有時導致異常的程序會繼續運行,因爲實際上,當我調用我的「異常管理器」時,它會捕獲並忽略異常。我想我的問題是:是否有任何方法來停止程序(就像拋出異常一樣)而不終止它(並且使它全部不可見,如在沒有控制檯打印的情況下)? – 2012-07-24 18:31:45

回答

3

由於異常是重要的,你可以使用一個日誌機制類似的log4j(http://logging.apache.org /log4j/1.2/),並在不希望打印某些例外或將日誌記錄到文件而不是控制檯時將日誌記錄設置爲不同的級別。

如果你只是不在乎異常,趕上它,什麼也不做(空捕獲,這是可怕的)。

+0

+1 – 2012-07-24 18:41:38

1

只要發現異常,並且不要在catch塊中放入任何東西。

我應該補充說,這樣做通常是一個壞主意。找到堆棧跟蹤或某種消息在查找程序中出現錯誤時非常有用。

+0

是的,我知道。我問,因爲我正在製作一個(非常棒的)異常捕獲器(使用GUI和內置的電子郵件程序)。有時候我想停止這個程序,這樣捕獲器就可以運行,那就是當我拋出異常(我想隱藏的時候)。 – 2012-07-24 18:27:57

0

你真正需要做的就是抓住它......但是,這是一個非常糟糕的主意。你可能想要制定你自己的例外,並抓住它。這樣你就不會吞下你不應該忽略的異常。你真的應該考慮這樣做的唯一時間是,如果你不能讓你的應用程序爆炸。如果是這種情況,那麼你至少應該記錄錯誤。

This解釋它比我更好(無論是一個很好的資源)。基本上,它表明:

「如果一個客戶可以合理預期從異常恢復, 使其成爲 檢查異常,如果客戶不能做任何事情,從異常中恢復, 使其成爲未經檢查的例外「。

1

如果你想方法殺程序,而不打印堆棧跟蹤,將其放置在一個try/catch塊,並在捕捉只需使用語句:

System.exit(1) 

,這樣可以讓系統知道該程序以不規則(非零)狀態退出,但不會將任何內容打印到System.err。

3

您可以通過設置System.setErr(null);

0

像這種重定向System.err的:

try { 
    some code... 
} catch (RuntimeException e) { 

    } 
+0

你真的不應該這樣做 – 2012-07-24 16:37:00

+0

爲什麼我真的不應該這樣做? – jrad 2012-07-24 16:44:18

+2

運行時異常僅在代碼中存在錯誤(類轉換,空指針等)時纔會引發。這些不是應該被吞噬的東西。你應該修正你的代碼,以免出現這些問題。你應該這樣做的唯一時間是如果你不能讓你的應用程序爆炸,但絕對不是一般情況。 – 2012-07-24 16:49:26

0

Java compiler你給一個抓一個嘗試,無論你實現在catch或沒有任何代碼在編譯期間只在乎。

2。你可以保持catch塊,或打印在控制檯日誌it..etc上....

如:

try{ 

    }catch(Exception ex){ 



    } 

printStackTrace()打印出現異常的method name,class name,file nameline number

1

沒有引發異常直接生成堆棧跟蹤到錯誤控制檯。代碼是由誰來調用的。在主程序的情況下:

public static void main(String args[]) throws Exception { 
    // do something that throws an exception 
} 

如果你沒有發現異常,系統會將它吐出到我相信的控制檯。

在某個地方,你需要處理異常。如果在GUI中顯示它是你想要的,那麼你將不得不這樣做:

public interface ExceptionHandler { 
    void handleException(Exception e); 
} 


public static void main(String args[]) { 
    ExceptionHandler exceptionHandler = ...; 

    try { 
    // something that might throw an exception 
    } 
    catch (Exception e) { 
    exceptionHandler.handle(e); 
    } 
}