3

我正在尝试在 java 中实现 GUI,但我是摇摆的初学者。我想澄清一点。我读到为了保持 GUI 响应,我应该使用 SwingWorker 类在单独的线程中执行任务。到目前为止还好。不,我有一个模型,其中包含大约 15 种远程方法。作为结果,每个方法都返回不同的对象类型。在我看来,用户按下按钮并调用模型中的适当方法。如果不使用 swingworker,GUI 就会冻结。我的问题是,我是否应该创建 15 个 Swingworker 线程的子类,并根据用户的操作根据需要为每个线程创建一个 NEW 实例?我的理解正确吗?有没有标准的方法或者我说的是正确的方法?

谢谢!

4

2 回答 2

2

看看这个:简单的后台任务

看来你有两个顾虑。首先,关于使用时所需的代码量SwingWorker:您确实需要SwingWorker为每个操作创建一个子类,但这并不意味着它们需要是顶级的、命名的类或在它们自己的文件中。它们可以是匿名类,如文章中所示,因此代码位于 GUI 的事件处理代码中。

其次,关于SwingWorker对象的实例化:您不能重用 a SwingWorker,但由于作业是由于用户活动(例如单击按钮)而执行的,因此每次实例化新对象时都不应该遇到任何性能问题。

于 2010-08-28T22:03:33.427 回答
0

无论如何,SwingWorkers 都能完成工作。根据我的经验,我不喜欢将 SwingWorkers 仅用于一项小工作。我更喜欢生成一个线程,并让该线程要求 EventDispatch 线程更新 GUI。尽管有一些例外,但只有 EventDispatch 线程应该更新 UI。

我建议阅读Swing 中线程中的线程。

尽管线程可能会变得繁重,并且也许此解决方案在所有情况下都不适用于您,但如果单独的线程需要引发 GUI 更改,请使用类似的东西,

java.awt.EventQueue.invokeLater(new Runnable() 
{ 

    public void run() 
    { 
        // this codes runs on the event dispatch thread 
        // update the ui here.
    } 
}); 
于 2010-09-01T17:16:44.750 回答