But what if I want to make the swing
worker class a non-inner class. Should
I need to pass label as an argument to
the constructor of swing worker class
so that the process() method can
access.
class PrimeNumbersTask extends
SwingWorker, Integer> {
PrimeNumbersTask(JTextArea textArea, int numbersToFind) {
//initialize
}
@Override
public List doInBackground() {
while (! enough && ! isCancelled()) {
number = nextPrimeNumber();
publish(number);
setProgress(100 * numbers.size() / numbersToFind);
}
}
return numbers;
}
@Override
protected void process(List chunks) {
for (int number : chunks) {
textArea.append(number + "
");
}
}
}
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();
注意构造函数PrimeNumbersTask(JTextArea textArea,int numbersToFind).他们通过JTextArea进行更新.