假設我有一個類定義了要完成的大塊工作,可以產生多個檢查的異常。處理ExecutionException的原因
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.
可能重複(http://stackoverflow.com/questions/10437890/what-is-最好的方式來處理執行異常) – Sjoerd