2012-04-12 49 views
0

我正在使用NetBeans IDE的Java,我試圖調試到輸出窗口。我的日誌以運行順序打印到輸出窗口,但例外情況除外,這些例外情況往往會在代碼運行前先打印出來。這裏是輸出的一個例子 -Java調試 - 併發異常

19:45:53.266:檢查我們是否過去的起點 19:45:53.267:SortRequestIdList中的錯誤。異常= [Ljava.lang.Object;不能轉換爲[Ljava.lang.String; 19:45:53.266:我們已經過了起點。查看我們的位置相對於界限 19:45:53.266:我們低於下限。關於運行RunnerBelow 19:45:53.267:ListLex中出現錯誤。異常= NULL 19:45:53.266:* 進入RunnerBelow *

所以例外打印 '提前'。有什麼方法可以控制何時打印(事件A在事件B之前運行)=>(A的調試輸出出現在事件B之前)?

感謝您提供的任何幫助!

克里斯

回答

1

printStackTrace使用System.err,而對於所有其他輸出,你可能使用System.out。在代碼中使用System.err.println(簡單解決方案),或者創建一個方法來接受異常並將其堆棧跟蹤打印到System.out(相當困難)。

2

異常通常使用System.err打印,而普通的調試消息將寫入System.out。由於使用兩個不同的流來創建輸出,有時您會在異常之前發生任何調試消息之前看到寫入異常。

如果您可以更改生成消息的代碼,我會建議將輸出添加到您的catch塊中的System.out。 (你可以使用System.out.println(e.getMessage()))。如果這不可行,您可以將相關的調試消息打印到System.err。

+0

啊,謝謝,是有道理的。我可以刪除System.err的用途,但它們很有用,因爲它們以紅色突出顯示我的輸出,而其他所有內容都是黑色的。有沒有辦法選擇輸出文本顏色?謝謝! - 添加:我將與http://www.diogonunes.com/it/work/jcdp/一起玩) – 2012-04-12 09:39:22

+0

JCDP看起來很有前途,從未聽說過。雖然我不確定它是否可以與NetBeans控制檯一起使用。除此之外,System.err輸出的着色是由IDE完成的,我沒有使用NetBeans的經驗,所以我不知道是否可以更改輸出的顏色,但是您可能需要查看屬性那裏。 – pushy 2012-04-12 10:43:26

+0

PS - 對於任何人都希望得到這個工作:JCDP站點在下載中提供最新的JANSI jar文件,但是JANSI開發者已經改變了這些方法,使得它們與JCDP不兼容。如果你想使用JCDP,那麼可以到http://jansi.fusesource.org/download.html並下載JANSI的早期版本(我剛剛嘗試過1.0,它的工作原理) – 2012-04-13 11:02:23