一个比SwingWorker更好的类Swing tip
当我们开发Swing应用程序的时候,SwingWorker是一个非常有用的类。SwingWorker类的目的是实现一个后台线程,让你可以用它来执行一些费时的操作,而不阻塞你程序GUI操作。我常用它来实现执行进度提醒。但是这个类有一个很大的缺点,就是假如你没有在完成方法中调用get()方法,将丢失所有在doInBackground()方法中抛出的异常。可能你的程序还没有全部执行完就停止了,但却不知道为什么。而Swing tip是一个能够很好解决这个问题的类。以下是它的源代码:
public abstract class BetterSwingWorker { private final SwingWorker原文地址:http://www.baptiste-wicht.com/2010/09/a-better-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(); } } }