我正在编写一个应用程序,在鼠标单击时会运行几个更新JtextArea的方法。问题是即使我正在使用每个方法调用更新文本区域,它实际上不会更新,直到鼠标单击中的所有内容都运行..
这可能需要很长时间才能完成所有操作,我希望每次调用都能看到文本区域更新,而不是等到一切都完成后
public void mouseClicked(MouseEvent e) {
DataCollector dc = new DataCollector();
dataCollected.append("Begining Test...\n\n");
dataCollected.append("Collecting System Information... \n\n");
dataCollected.append(dc.getSystem());
... lots more like this...
}
答案 0 :(得分:0)
在鼠标点击中的所有内容都运行之前,它实际上并没有更新。
这完全正确。在GUI线程上调用mouseClicked
方法,该线程是唯一更新GUI的线程。所以你的"更新textarea内容"在mouseClicked
方法完成之后执行操作。因此,在GUI线程上运行的方法应该运行得非常快,因此其他想要在GUI线程上运行的方法可以这样做。
您可以启动一个与正常代码并行运行的新线程,该代码将更新您的JTextArea。阅读Lesson: Concurrency in Swing关于如何使用swing中的线程(以及" Event Dispatch Thread"是什么)。