【问题标题】:Overriding the process() Method in SwingWorker覆盖 SwingWorker 中的 process() 方法
【发布时间】:2015-02-04 18:31:51
【问题描述】:

我正在尝试使用 String 动态更新 GUI。谁能看到为什么 process 方法没有正确覆盖?我查看了其他问题,但仍然看不到我没有正确地覆盖它。

public class WorkerDemo extends JFrame {

private JLabel counterLabel = new JLabel("Not started");
private Worker worker = new Worker();
private JButton startButton = new JButton(new AbstractAction("Start") {

    @Override
    public void actionPerformed(ActionEvent arg0) {
            worker = new Worker();
            worker.execute();
    }
});
private JButton stopButton = new JButton(new AbstractAction("Stop") {

    @Override
    public void actionPerformed(ActionEvent arg0) {
        worker.cancel(true);
    }
});

public WorkerDemo() {

    add(startButton, BorderLayout.WEST);
    add(counterLabel, BorderLayout.CENTER);
    add(stopButton, BorderLayout.EAST);
    pack();
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
}

class Worker extends SwingWorker<Void, Integer> {

    int counter = 0;
    String abc = "abc";

    @Override
    protected Void doInBackground() throws Exception {
        while(true) {
            abc += abc; 
            publish(abc);
            Thread.sleep(60);
        }
    }

    @Override
    protected void process(List<Object> chunk) {
        // get last result
        String to_return = (String) chunk.get(chunk.size()-1);

        counterLabel.setText(to_return);
    }
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            new WorkerDemo();
        }
    });
}
}

【问题讨论】:

  • 源代码中的一个空白行是永远需要的。 { 之后或 } 之前的空行通常也是多余的。

标签: java multithreading swing user-interface process


【解决方案1】:

因为你有SwingWorker&lt;Void, Integer&gt;,你已经定义了Integer作为一个类型,通过发布和处理方法来执行中间结果。这意味着正确的publish()process() 方法应该使用Integer

@Override
protected Void doInBackground() throws Exception {
    int someResult = 0;
    ...
    publish(someResult);
    ...
 }


@Override
protected void process(List<Integer> chunk) {
}

请参阅SwingWorker 了解更多详情。

【讨论】:

    猜你喜欢
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 2011-09-15
    相关资源
    最近更新 更多