Swing / SwingWorker Beginer的问题

时间:2010-08-28 21:42:26

标签: java user-interface swing design-patterns swingworker

我正在尝试在java中实现GUI,但我是初学者。我想说清楚一点。我读到为了保持GUI响应,我应该使用SwingWorker类在一个单独的线程中完成任务。好到目前为止。 不,我有一个模型,大约15种方法是远程方法。每个方法返回的结果与其他方法不同。 在我看来,用户按下按钮并调用模型中的相应方法。没有使用swingworker,GUI就冻结了。我的问题是,我是否应该根据用户的操作创建15个Swingworker线程子类并根据需要创建每个新实例?我的理解是否正确?有没有一种标准的方式,或者我说的是一种正确的方法?

谢谢!

2 个答案:

答案 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.
    } 
});