首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swing员工重写进程<T,V>

Swing员工重写进程<T,V>
EN

Stack Overflow用户
提问于 2015-09-30 17:38:39
回答 1查看 146关注 0票数 0

我试图重写process()方法,以确保某些代码在EDT中运行。我确保了<T,V>自始至终都是匹配的,但它仍然不允许我覆盖。这是我的代码:

代码语言:javascript
复制
final SwingWorker<ArrayList<Block>,Integer[]> swingSlaveLabourer = new SwingWorker<ArrayList<Block>, Integer[]>() {

    @Override 
    protected ArrayList<Block> doInBackground() throws Exception {
        blockList.doHeavyWork()..
        Integer [] status = new Integer[2];
        status[0] = 1;
        status[1] = 0;
        this.process(status);
        return blockList;
    }

    @Override //wont allow override
    protected void process (Integer[] chunks){
        progressBar.setValue(chunks[0]);
    }
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-30 17:47:36

process方法以List<V>作为参数。它表示已发布的所有数据块。您需要将代码更改为:

代码语言:javascript
复制
@Override
protected void process(List<Integer[]> chunks) {
    // do something
}

不应该从process方法直接调用doInBackground。相反,您应该调用publish来发布每个数据块。

请参阅取自SwingWorker Javadoc的以下示例:

代码语言:javascript
复制
class PrimeNumbersTask extends SwingWorker<List<Integer>, Integer> {

     PrimeNumbersTask(JTextArea textArea, int numbersToFind) {
         //initialize
     }

     @Override
     public List<Integer> doInBackground() {
         while (! enough && ! isCancelled()) {
                 number = nextPrimeNumber();
                 publish(number); // each computed number is published
                 setProgress(100 * numbers.size() / numbersToFind); // and progress updated
             }
         }
         return numbers;
     }

     @Override
     protected void process(List<Integer> chunks) {
         // in the mean while, we print each published value to a textarea
         for (int number : chunks) {
             textArea.append(number + "\n");
         }
     }
 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32872457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档