在另一个类中使用 Swingworker 发布方法

2023-11-30

我有一个 Swingworker,这样我的 GUI 可以在我在后台工作时保持响应。

问题是我需要在各个点更新 gui(例如,用程序状态/信息更新标签),但我有很多处理要做,但我无法在一个巨大的 doInBackground 方法中完成所有处理。

因此,我从 doInBackground 方法实例化其他类来执行此操作,问题是除了在此 SW 线程或 EDT 中之外,我无法更新 gui。

注意:为了简洁起见,我删除了不必要的代码

我希望能够从 DoWork1 和 DoWork2 等更新 gui。我尝试传递对 SW swingworker 对象的引用,但无法访问发布方法,可能是因为它受到保护。我也许可以使用反射来更新 gui,但任何使用我的代码的人都不会喜欢这样。我确实听到有人在某处提到过使用反向接口,但没有例子,所以我不知道。

任何帮助将不胜感激,谢谢。

public class SW extends SwingWorker<Object, String> {

    private DoWork1 doWork1;
    private DoWork2 doWork2;
    private Iframe frame;

    public SW(Iframe frame, DoWork1 doWork1) {
        this.frame = frame;
        this.doWork1 = doWork1;
        this.doWork2 = new DoWork2();

    }

    @Override
    protected Object doInBackground() {
        doWork1.lotsOfWork("");
        publish("Can write to label from here");
        doWork2.lotsOfWork("", "");
        return null;
    }

    @Override
    public void process(List<String> chunks) {
        for (String s : chunks) {
            frame.getLabel().setText(s);
        }
    }

    @Override
    protected final void done() {
    }
}


public class DoWork1 {
    public DoWork1() {
    }
    private lotsOfWork(String s) {
        //Do lots of work in here
        //But need to update the gui with information!
        //would like to be able to do something like:
        publish("somehow write to label from here!?");
    }
}


public class DoWork2 {
    public DoWork2() {
    }
    private lotsOfWork(String s, String s) {
        //Do lots more work in here
        //But need to update the gui with information!
        //would like to be able to do something like:
        publish("somehow write to label from here!?");
    }
}

在 swingworker 中创建一个名为publishData的公共方法,然后调用受保护的publish方法,并通过变量或接口从其他类DoWork1访问publishData。

这样,在 dobackground 工作方法中实例化的所有类也可以将数据发布到 EDT/GUI。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在另一个类中使用 Swingworker 发布方法 的相关文章

随机推荐