0

在我的代码中,用户按下一个按钮,然后我希望它调用一个 SwingWorker 后台线程,我基本上循环遍历一个列表,将它与其他数据交叉引用,然后使用 JLabel 更新 GUI 每次通过我的环形。问题是我知道我应该在 doInBackground() 中执行此操作,但我没有什么可返回的,而且我还想在每次循环循环时用新的 JLabel 更新 JPanel。我该怎么做呢?谢谢!

4

2 回答 2

6

这是一个完整的例子,我真的很喜欢Swing Worker Example

你必须使用publish()和覆盖process()

例子:

class Worker extends SwingWorker<Void, String> {

    @Override
    protected void doInBackground() throws Exception {
       //here you make heavy task this is running in another thread not in EDT
       //process after some time call publish() 


    }

    @Override
    protected void process(List<String> chunks) {
        //this is executed in the EDT
        //here you update your label
    }
}
于 2013-08-26T18:00:48.000 回答
4

阅读关于使用Swing Worker的 Swing 教程,尤其是关于Tasks that Have Interim Results.

您将需要在循环中根据需要调用该publish()方法。

于 2013-08-26T17:54:18.360 回答