2013-06-19 82 views
3

如何在程序運行時創建顯示System.out/err的Swing控制檯窗口?在程序運行時顯示System.out/err的Swing控制檯窗口

我有一個應用程序使用了大量的System.out狀態更新,我想從Eclipse遷移到自包含的.jar。我一直在試圖創建一個「控制檯窗口」,它將顯示System.out和System.err。我使用this鏈接作爲跳轉點,雖然它與程序啓動的GUI應用程序正常工作,但只要我啓動運行應用程序肉的線程,控制檯窗口就會停止更新。我測試了將system.out重定向到一個文件,並且運行良好,所以我很困惑我可能會做錯什麼。基本上,我有幾個主要的程序階段。

  1. 程序啓動。控制檯初始化正常,直到我調用線程。
  2. GUI init。相同。
  3. 初始邏輯運行。相同。
  4. 在這裏的一切似乎停止工作線程:在JTextArea中從來沒有實際加載 - 創建窗口,但內容只是無論是在時間窗口後面的副本,沒有文本會被寫入
+1

我不遵循所有你說的原因是它非常大,但你的textArea必須在事件派發線程中更新,而不是在另一個線程中導致更改不會受到影響。 – nachokk

回答

3

我認爲你可能試圖從事件分派線程以外的線程更新文本區域,這通常會導致GUI無法更新/掛起/其他不好的事情發生。

你想要做的是通過致電SwingUtilities.invokeLaterlink)更新您的顯示器。事情是這樣的:

SwingUtilities.invokeLater(new Runnable(){ 
    public void run(){ 
    myTextArea.append("Some string"); 
    } 
}); 

而不是使用System.outSystem.err您曾經考慮過使用真實記錄系統?應用程序通常不使用System.out來記錄消息,因爲它是一種全有或全無的方法。使用任何一半體面的日誌庫,您可以設置級別並微調您從哪裏接收消息。就我個人而言,我喜歡Logback + SLF4J,但是Java中內置的日誌記錄系統足夠用於簡單的庫。

+0

我實際上使用apache log4j,我只是想知道如何讓控制檯窗口顯示正在發生的事情。我會看看invokeLater,謝謝:) – ChickenWing

2

您可以嘗試使用Message Console

當我和消息控制檯一起工作時發現它們很難處理,所以我用了一種不同的方法來玩PipedStreams。

+0

這個對我來說工作得很好。 –

1

一般來說,你應該避免手動記錄System.Out的東西,因爲它可能會變得非常麻煩,並且實現一個日誌庫,例如log4jThis post有更多關於日誌庫的信息。

相關問題