编程语言
首页 > 编程语言> > java-在另一个类中使用Swingworker publish方法

java-在另一个类中使用Swingworker publish方法

作者:互联网

我有一个摇摆工,所以我在后台工作时我的GUI可以保持响应.

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

所以我从doInBackground方法实例化其他类来做到这一点,问题是我无法更新gui,除非在此SW线程或EDT中.

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

我希望能够从DoWork1&中更新gui. DoWork2等.我尝试过传递对SW swingworker对象的引用,但是大概不能访问publish方法,因为它受到了保护.我也许可以使用反射来更新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中,创建一个名为say publishData的公共方法,该方法随后调用受保护的publish方法,并通过变量或接口从其他类DoWork1访问publishData.

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

标签:swingworker,swing,java
来源: https://codeday.me/bug/20191028/1954668.html