我正在用 Java 构建一个带有 GUI 的小软件。我有一个连续运行的算法(几乎 24/7)(我在 GUI 中有一个停止/开始按钮)这个算法应该更新一个列表并在 GUI 上显示一个日志。问题是——我是否应该为此过程(算法)创建一个单独的类或线程,1)如果答案是肯定的——我是否应该将应该更新的 GUI 元素作为参数传输到该过程?是否会导致更新 GUI 出现问题?2)如果不是 - 我应该如何设计它?
提前谢谢了!
我正在用 Java 构建一个带有 GUI 的小软件。我有一个连续运行的算法(几乎 24/7)(我在 GUI 中有一个停止/开始按钮)这个算法应该更新一个列表并在 GUI 上显示一个日志。问题是——我是否应该为此过程(算法)创建一个单独的类或线程,1)如果答案是肯定的——我是否应该将应该更新的 GUI 元素作为参数传输到该过程?是否会导致更新 GUI 出现问题?2)如果不是 - 我应该如何设计它?
提前谢谢了!
您应该用于繁重的任务SwingWorker
,专为这种情况而设计。在这里你有一篇很好的文章为什么我们需要 SwingWorker?. 如果您的算法需要例如 5 秒并且您在与 gui 相同的线程中运行,则您需要这个原因,它将冻结您的视图直到完成。
顺便说一句,所有 gui 组件都必须在 中更新Event Dispatch Thread
,因此您不必在另一个线程中更新它们,因为它们不会被更新。
问题是 - 我应该为此过程(算法)创建一个单独的类或线程,
是的,这是一种常见的做法。
我应该将应该更新的 GUI 元素作为参数传输到该过程吗?是否会导致更新 GUI 出现问题?
你真的不需要通过任何东西。您唯一需要确保的是与 ui 元素的所有交互都在 ui 线程中完成(以避免并发问题)。通常这是通过创建执行 ui 相关工作的可运行对象并将其传递给您正在使用的 UI 框架来在 ui 线程中调度来完成的。