Swing控制台窗口,在程序运行时显示System.out / err

时间:2013-06-19 15:38:01

标签: java swing console jtextarea system.out

如何在程序运行时创建显示System.out / err的Swing控制台窗口?

我有一个使用很多System.out状态更新的应用程序,我想从Eclipse迁移到一个独立的.jar。我一直在尝试创建一个“控制台窗口”,它将显示System.out和System.err。我使用this链接作为跳转点,虽然它与程序启动的GUI应用程序一起正常工作,但只要我启动运行应用程序内容的线程,控制台窗口就会停止更新。我测试了将system.out重定向到一个文件并且工作正常,所以我很困惑我可能做错了什么。基本上,我有几个主要的阶段。

  1. 程序启动。控制台初始化很好,一直工作直到我调用线程。
  2. GUI init。相同。
  3. 初始逻辑运行。相同。
  4. 在一切似乎停止工作的线程中:JTextArea实际上从未加载 - 窗口已创建,但内容只是当时窗口后面的内容的副本,并且没有写入文本

3 个答案:

答案 0 :(得分:3)

我认为您可能正在尝试从事件调度线程以外的线程更新文本区域,这通常会导致GUI无法更新/挂起/发生其他不良事件。

您要做的是通过拨打SwingUtilities.invokeLaterlink)来更新您的显示器。像这样:

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

您考虑使用真正的日志记录系统而不是使用System.outSystem.err吗?应用程序通常不会使用System.out来记录消息,因为它是一种全有或全无的方法。使用任何中途正确的日志记录库,您可以设置级别并微调您从哪里接收消息。我个人喜欢Logback + SLF4J,但Java中内置的日志记录系统对于一个简单的库来说已经足够了。

答案 1 :(得分:2)

您可以尝试使用Message Console

当我使用消息控制台时,我使用了PipedStreams并发现它们难以使用,所以我采用了不同的方法。

答案 2 :(得分:1)

通常,您应该避免手动记录System.Out,因为它可能变得非常麻烦,并实现了log4j等日志库。 This post提供了有关记录库的更多信息。