所以我一直在尝试使用这篇文章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()
方法的最后几行,将JTextArea
(engineOutput
)设置为{{ 1}}。
System.out
}
答案 0 :(得分:1)
很难说清楚,因为我不知道你的AutomationLoop和TextAreaOutputStream类做了什么,但这听起来像是一个线程问题。
所有Swing代码都需要在Event Dispatch Thread中执行。如果你有一个没有更新GUI的长时间运行的代码,那么你可能希望它运行另一个线程,否则GUI没有机会更新。根据您的行为,听起来像在事件调度线程中运行了.Loop.startLoop(),因此GUI永远不会有机会自行更新。
theLoop.startLoop()是否启动了一个新线程?如果不是,它可能应该;否则,直到该代码完成执行,您的GUI将不会更新。