一个比SwingWorker更好的类Swing tip

13年前
当我们开发Swing应用程序的时候,SwingWorker是一个非常有用的类。SwingWorker类的目的是实现一个后台线程,让你可以用它来执行一些费时的操作,而不阻塞你程序GUI操作。我常用它来实现执行进度提醒。但是这个类有一个很大的缺点,就是假如你没有在完成方法中调用get()方法,将丢失所有在doInBackground()方法中抛出的异常。可能你的程序还没有全部执行完就停止了,但却不知道为什么。而Swing tip是一个能够很好解决这个问题的类。以下是它的源代码:
public abstract class BetterSwingWorker {      private final SwingWorker worker = new SimpleSwingWorker();         public void execute() {          SwingUtilities.invokeLater(new Runnable() {              @Override              public void run() {                  before();              }          });             worker.execute();      }         protected void before() {          //Nothing by default      }         protected abstract void doInBackground() throws Exception;         protected abstract void done();         private class SimpleSwingWorker extends SwingWorker {          @Override          protected Void doInBackground() throws Exception {              BetterSwingWorker.this.doInBackground();                 return null;          }             @Override          protected void done() {              try {                  get();              } catch (final InterruptedException ex) {                  throw new RuntimeException(ex);              } catch (final ExecutionException ex) {                  throw new RuntimeException(ex.getCause());              }                 BetterSwingWorker.this.done();          }      }  }
原文地址:http://www.baptiste-wicht.com/2010/09/a-better-swingworker/