我正在尝试在java中实现GUI,但我是初学者。我想说清楚一点。我读到为了保持GUI响应,我应该使用SwingWorker类在一个单独的线程中完成任务。好到目前为止。 不,我有一个模型,大约15种方法是远程方法。每个方法返回的结果与其他方法不同。 在我看来,用户按下按钮并调用模型中的相应方法。没有使用swingworker,GUI就冻结了。我的问题是,我是否应该根据用户的操作创建15个Swingworker线程子类并根据需要创建每个新实例?我的理解是否正确?有没有一种标准的方式,或者我说的是一种正确的方法?
谢谢!
答案 0 :(得分:2)
看看这个:Simple Background Tasks。
看来你有两个问题。首先,关于使用SwingWorker
时所需的代码量:您需要为每个操作创建SwingWorker
的子类,但这并不意味着它们需要是顶级的命名类,或者在他们自己的文件中。它们可以是匿名类,如文章所示,因此代码在GUI的事件处理代码中。
其次,关于SwingWorker
对象的实例化:你不能重用SwingWorker
,但由于作业是由于用户活动而被执行(例如点击一个按钮),你不应该'每次都要实例化新对象时遇到任何性能问题。
答案 1 :(得分:0)
通过各种方式,SwingWorkers完成了工作。根据我的经验,我不喜欢将SwingWorkers用于一项小工作。我更喜欢产生一个线程,并让该线程要求EventDispatch线程更新GUI。只有EventDispatch线程应该更新UI,尽管有一些例外。
我建议阅读threads in Swing.
中的帖子虽然线程可能会变得很重,但是在所有情况下这个解决方案都不适合你,如果一个单独的线程需要引发GUI的变化,请使用类似的东西,
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
// this codes runs on the event dispatch thread
// update the ui here.
}
});