I have already explained it earlier:
Ranganathan Kaliyur Mannar wrote:
The signature of the 'call()' method has a throws clause.
2) Any exception thrown from the task is masked as ExecutionException. So, you have to catch this exception (and not the exception you expect - in your case, the IOException)
Did you go through the Callable API?
How would you know that your task threw an exception unless it is rethrown by the callableResult.get() method? Earlier, you had a try/catch block within the task to handle this - but, that doesn't make it easy to rerun the task. Callable on the other hand does just that. It gives you a chance to handle the exception - in your case, you can use this to re-run the task.