JavaDocs有一个很好的例子
class PrimeNumbersTask extends SwingWorker<List<Integer>, Integer> { PrimeNumbersTask(Jtextarea textarea, int numbersToFind) { //initialize } @Override public List<Integer> doInBackground() { List<Integer> numbers = new ArrayList<Integer>(25); while (!enough && !isCancelled()) { number = nextPrimeNumber(); numbers.add(number); 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看一下发布和处理
潜在的意图是,您仅需要从事件调度线程中更新UI,通过将要更新的数据通过方法传递到UI
publish,
SwingWorker将
process在EDT上下文中要求您



