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

SwingWorker: How to delegate values from the process() method to another class

在我的程序中,我有一个 swingworker,这样用户就可以在程序本身仍然处于 运行 时访问 GUI。

有没有办法 return 我在 process() 方法中声明的值到另一个 class?我问的原因如下:

GUI 显示图表等内容,如果用户按下按钮,图表应该会更新。在 doInBackground() 方法中,ArrayList 是永久更新的。在这个 ArrayList 中是图表应该显示的值,所以每次用户按下按钮时,图表应该显示实际在 Array List

中的值

代码如下

 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();
    }`

如果我没理解错的话,您想将 process() 中完成的一些逻辑委托给另一个 class。在这种情况下,创建 SwingWorker 的命名子 class 并使用委托实例对其进行初始化。

示例:

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)

中实现您的逻辑