SwingWorker:如何将process()方法中的值委托给另一个类

时间:2015-09-11 15:57:56

标签: java swingworker

在我的程序中,我有一个swingworker,因此用户可以在程序本身仍在运行时访问GUI。

有没有办法将我在process()方法中声明的值返回给另一个类?我问的原因如下:

GUI显示图表,如果用户按下按钮,则应该更新。在doInBackground()方法中,ArrayList是永久更新的。在此ArrayList中是图表应显示的值,因此每次用户按下按钮时,图表都应显示实际位于数组列表中的值

代码如下

 protected Void doInBackground()
{
    SaveList savelist = new SaveList();


    while(true)
    {
     try
     {
            savelist.updateSaveList();
            publish((SaveList) savelist);

            Thread.sleep(100);
     }

     catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}



    protected void process(SaveList savelist) 
    {
     this.savelistsize = savelist.saveListSize();
     this.trueLabeled = savelist.trueLabeled();
     this.falseLabeled = savelist.falseLabeled();
     this.trueLabeledPercent = savelist.trueLabeled()/savelist.saveListSize();
     this.falseLabeledPercent = savelist.falseLabeled()/savelist.saveListSize();
    }`

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望将process()中完成的一些逻辑委托给另一个类。在这种情况下,创建SwingWorker的命名子类,并使用委托实例初始化它。

示例:

public class MySwingWorker extends SwingWorker<Void, X> { // X - I don't know the type of SaveList elements

    private MyDelegate delegate;

    public MySwingWorker(MyDelegate delegate) {
        this.delegate = delegate;
    }

    protected Void doInBackground() { ... }

    protected void process(SaveList savelist) {
        delegate.doSomethingWith(savelist);
    }
}

然后您可以在MyDelegate.doSomethingWith(SaveList)

中实现您的逻辑