我有一个小问题,现在我必须处理一个小型 Java 项目。我正在尝试从 Button 事件处理程序运行几个线程;那么最后一个线程必须更新 UI 上的 TextArea。线程正在做计算工作。最重要的部分是让 UI 工作正常 - 我不想冻结 UI,当然我想定期从其他线程之一更新 UI 的 TextArea(不是 ui 的线程)。所以这是我的代码的一部分:
在 Button 的事件处理程序中,我正在启动这 4 个线程:
Thread generate = new CombinaMaker();
generate.run();
Thread forward = new TranslateForward();
forward.run();
Thread backward = new TranslateBackward();
backward.run();
Thread refresh = new Refresher();
refresh.run();
我希望线程同时工作。Refresher 线程必须定期更新 UI TextArea 组件。
因此,这是我从 Refresher 线程更新 UI 的方法:
public static void updateProgress()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
//HERE
//I have a loop that have to be looping at every 500 ms
}
}
}
我的问题是:我应该这样做吗?我需要简单有效。这个循环让我很难过,因为只要应用程序正常工作,它就必须循环。这可能是冻结用户界面的原因吗?我知道我在某个地方犯了大错误,但此刻我无法独自找到它。也许你可以建议我一些简单的解决方案。最后一个想法 - 前 4 个线程:我想“同时”启动它们,而不会冻结我的 UI。这种方式(从事件处理程序中像这样启动它们......)是正确的还是可能更好?非常感谢朋友!
PS。如果通过我的“刷新”线程刷新 UI 是一项艰巨的工作,我已经准备好妥协变体 - 通过他自己的线程(UI 线程)更新 UI。但在这种情况下,我可能必须使用一些“时间拍摄机制”——避免 UI 冻结。你在想什么?