Swing Worker Thread表示Super Class中没有Process()方法

时间:2016-02-07 23:59:13

标签: java multithreading swing swingworker

我正在尝试在更新GUI时实现SwingWorker Thread。我知道process()方法是由EDT执行的,所以如果我需要更新GUI,我应该将更新代码放在该方法中。

但是,当我尝试覆盖process()方法时,我得到错误,Method没有从超类中实现一个方法。

我是否缺少某些东西或者Process()方法不再存在?

class SwingWorkerThread extends SwingWorker<String, String> {

    @Override
    protected String doInBackground() throws Exception {
        String Pub = "A";

        for (int i = 0; i < 20; i++) {
            Pub = String.valueOf(i);

            publish(Pub);
        }

        return Pub;
    }

    @Override
    protected String process(String h) {
        System.out.println(Pub);
        MainFrame.TextArea.setText(Pub);
        return null;
    }

    @Override
    protected void done() {
        String status;
        status = get();
        try {

            System.out.println("Done");

        } catch (Exception ex) {
            System.out.println("Error: " + ex);
        }
    }

}

2 个答案:

答案 0 :(得分:3)

String process(String)上没有SwingWorker方法。有一个void process(List<V>),这可能是你想要的。

(这仍然无法解决Pub是局部变量并且在该方法中不可见的事实。)

答案 1 :(得分:2)

SwingWorker's processmethod有不同的参数和不同的返回类型:

protected void process(List<V> chunks)

只有具有相同签名的子类的方法(即:名称加上其参数的数量和类型)和返回类型才能覆盖超类方法,参见https://docs.oracle.com/javase/tutorial/java/IandI/override.html