Java doInBackground()和process()之间的关系是什么?
你好。你能解释一下这两者之间的关系吗?我正在尝试做一个使用SwingWorker的程序。我认为publishvalue只是将值传递给process 编辑: 从中看到此代码Java doInBackground()和process()之间的关系是什么?,java,swingworker,Java,Swingworker,你好。你能解释一下这两者之间的关系吗?我正在尝试做一个使用SwingWorker的程序。我认为publishvalue只是将值传递给process 编辑: 从中看到此代码 我想知道,chunks是一个列表,对吗?那么,SwingWorker是如何为其增加价值的呢 嗯。但是什么时候?因为我不能预测块的大小,你不能。由SwingWorker决定何时实际通知GUI更改。javadoc对此进行了解释。读它:例如,我做了这样一件事:publishAbc;出版定义;publishGhi;chunk.size
我想知道,chunks是一个列表,对吗?那么,SwingWorker是如何为其增加价值的呢 嗯。但是什么时候?因为我不能预测块的大小,你不能。由SwingWorker决定何时实际通知GUI更改。javadoc对此进行了解释。读它:例如,我做了这样一件事:publishAbc;出版定义;publishGhi;chunk.size会有所不同吗?是的,可能会。链接中有一个例子是JB Nizet发布的。你读了吗?doInBackground是在后台线程中运行的,不是EDT。在EDT的上下文中调用Process,以允许您处理传递给publish方法的信息。无法保证在调用publish后何时调用进程。SwingWork对通过publish方法传递的项进行排队,以便在将来某个时候,可以将它们传递给进程,从队列中基本上删除并提供给您,这就是为什么publish不需要传递单个值,而是需要一个列表
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);
setProgress(100 * numbers.size() / numbersToFind);
}
}
return numbers;
}
@Override
protected void process(List<Integer> chunks) {
for (int number : chunks) {
textArea.append(number + "\n");
}
}
}
JTextArea textArea = new JTextArea();
final JProgressBar progressBar = new JProgressBar(0, 100);
PrimeNumbersTask task = new PrimeNumbersTask(textArea, N);
task.addPropertyChangeListener(
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
if ("progress".equals(evt.getPropertyName())) {
progressBar.setValue((Integer)evt.getNewValue());
}
}
});
task.execute();
System.out.println(task.get()); //prints all prime numbers we have got