程序运行时使用System.out更新jTextArea

时间:2013-05-29 20:11:53

标签: java swing jtextarea

所以我一直在尝试使用这篇文章for making a console window in a JTextArea中的代码。该代码似乎与我的功能有关,但我遇到了一个奇怪的问题。

我的程序:我基本上是为我最近制作的命令行工具构建一个快速而肮脏的gui。 gui包含的唯一内容是一个显示“Start Automation Engine”的按钮,然后它有一个JTextArea,它应该显示我的程序发送给System.out.println()的任何文本。

此刻它什么也没显示,虽然程序本身正在运行并且正在运行(并且应该显示输出结果。)我注意到当我点击gui上的按钮时,按钮在程序运行时保持按下状态。这让我相信JFrame在程序运行时没有更新,因此JTextArea,因为它的孩子,没有更新。这不太好......

当程序在后台运行时,有没有办法让JTextArea更新?

这是我JFrame的代码,顺便说一下,如果你想看看它以便更好地了解我在说什么。它主要是在Eclipse中的WindowBuilder中构建的。我唯一做的就是向startAutmoatorEngineButton添加一个按钮监听器,然后添加initalize()方法的最后几行,将JTextAreaengineOutput)设置为{{ 1}}。

System.out

}

1 个答案:

答案 0 :(得分:1)

很难说清楚,因为我不知道你的AutomationLoop和TextAreaOutputStream类做了什么,但这听起来像是一个线程问题。

所有Swing代码都需要在Event Dispatch Thread中执行。如果你有一个没有更新GUI的长时间运行的代码,那么你可能希望它运行另一个线程,否则GUI没有机会更新。根据您的行为,听起来像在事件调度线程中运行了.Loop.startLoop(),因此GUI永远不会有机会自行更新。

theLoop.startLoop()是否启动了一个新线程?如果不是,它可能应该;否则,直到该代码完成执行,您的GUI将不会更新。