假设我有一个类定义了一大块要完成的工作,它可以产生几个检查异常。
class WorkerClass{
public Output work(Input input) throws InvalidInputException, MiscalculationException {
...
}
}
现在假设我有某种可以调用此类的 GUI。我使用 SwingWorker 来委派任务。
Final Input input = getInput();
SwingWorker<Output, Void> worker = new SwingWorker<Output, Void>() {
@Override
protected Output doInBackground() throws Exception {
return new WorkerClass().work(input);
}
};
如何处理 SwingWorker 抛出的可能异常?我想区分我的工人类的异常(InvalidInputException 和 MiscalculationException),但是 ExecutionException 包装器使事情变得复杂。我只想处理这些异常——不应捕获 OutOfMemoryError。
try{
worker.execute();
worker.get();
} catch(InterruptedException e){
//Not relevant
} catch(ExecutionException e){
try{
throw e.getCause(); //is a Throwable!
} catch(InvalidInputException e){
//error handling 1
} catch(MiscalculationException e){
//error handling 2
}
}
//Problem: Since a Throwable is thrown, the compiler demands a corresponding catch clause.