设计问题 - 应该为GUI使用单独的线程吗?

时间:2013-06-22 18:49:36

标签: java multithreading user-interface

我正在使用GUI构建一个Java软件。 我有一个连续运行的算法(差不多24/7)(我在GUI中有一个停止/启动按钮) 该算法应更新列表并在GUI上显示日志。 问题是 - 我应该为此过程(算法)创建单独的类或线程, 1)如果答案是肯定的 - 我应该将我应该更新的GUI元素作为参数传输到该程序吗?它会导致更新GUI的问题吗? 2)如果没有 - 我该如何设计呢?

非常感谢提前!

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框架来完成的。