別スレッドで、Swingのイベントを処理する仕組み。 別スレッドだけど、定期的にディスパッチスレッドへ処理をさせることができる。 !注意 JDK1.6.0_20 までは、SwingWorker にバグがあるので注意。 Update21 で修正された。 バグの内容としては、SwingWorkerの終了を正確に取得できないことがある。 !例1 {{code Java, final JLabel label; class MeaningOfLifeFinder extends SwingWorker { @Override public String doInBackground() { return findTheMeaningOfLife(); } @Override protected void done() { try { label.setText(get()); } catch (Exception ignore) { } } } (new MeaningOfLifeFinder()).execute(); }} !例2 {{code Java, 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 + "\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 }} {{category2 プログラミング言語,Java}}