我试图重写process()方法,以确保某些代码在EDT中运行。我确保了<T,V>自始至终都是匹配的,但它仍然不允许我覆盖。这是我的代码:
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]);
}
};发布于 2015-09-30 17:47:36
process方法以List<V>作为参数。它表示已发布的所有数据块。您需要将代码更改为:
@Override
protected void process(List<Integer[]> chunks) {
// do something
}不应该从process方法直接调用doInBackground。相反,您应该调用publish来发布每个数据块。
请参阅取自SwingWorker Javadoc的以下示例:
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");
}
}
}https://stackoverflow.com/questions/32872457
复制相似问题