我正在使用GUI构建一个Java软件。 我有一个连续运行的算法(差不多24/7)(我在GUI中有一个停止/启动按钮) 该算法应更新列表并在GUI上显示日志。 问题是 - 我应该为此过程(算法)创建单独的类或线程, 1)如果答案是肯定的 - 我应该将我应该更新的GUI元素作为参数传输到该程序吗?它会导致更新GUI的问题吗? 2)如果没有 - 我该如何设计呢?
非常感谢提前!
答案 0 :(得分:3)
你应该用于繁重的任务SwingWorker
,专为这种情况而设计。在这里你有一篇很好的文章why do we need SwingWorker?。
你需要这个原因,如果你的算法需要5秒,并且你在与gui相同的线程中运行,它将冻结你的视图直到完成。
BTW必须在Event Dispatch Thread
中更新所有gui组件,因此您不必在另一个线程中更新它们,因为它们不会被更新。
答案 1 :(得分:1)
问题是 - 我应该为此创建一个单独的类或线程 程序(算法),
是的,这是一种常见的做法。
我应该将我应该更新的GUI元素作为参数传输 那个程序?是否会导致更新GUI的问题?
你真的不需要传递任何东西。您需要确定的唯一事情是与ui元素的所有交互都是在ui线程内完成的(以避免并发问题)。通常这是通过创建与ui相关的作业的runnable并将其传递给用于在ui线程中安排的UI框架来完成的。