Как обработать исключение java.util.concurrent.ExecutionException?
Некоторая часть моего кода вызывает исключение java.util.concurrent.ExecutionException. Как я могу справиться с этим? Могу ли я использовать предложение throws? Я немного новичок в Java.
3 ответа
Если вы хотите обработать исключение, все довольно просто.
public void exceptionFix1() {
try {
//code that throws the exception
} catch (ExecutionException e) {
//what to do when it throws the exception
}
}
public void exceptionFix2() throws ExecutionException {
//code that throws the exception
}
Имейте в виду, что второй пример должен быть заключен в try-catch
заблокировать где-нибудь до вашей иерархии исполнения.
Если вы хотите исправить это исключение, мы должны увидеть больше вашего кода.
Это зависит от того, насколько важна ваша миссия Future
был для того, как справиться с этим. Правда в том, что ты никогда не получишь его. Вы только когда-либо получите это исключение, если что-то было сгенерировано кодом, выполненным в вашем Future
это не было обработано.
Когда ты catch(ExecutionException e)
Вы должны быть в состоянии использовать e.getCause()
чтобы определить, что произошло в вашем Future
,
В идеале, ваше исключение не всплывает на поверхность, как это, а обрабатывается непосредственно в вашем Future
,
Вы должны расследовать и устранить причину вашего исключения ExecutionException.
Одна из возможностей, описанная в книге "Java Concurrency in Action", заключается в создании launderThrowable
метод, который заботится о распаковке ExecutionExceptions
void launderThrowable ( final Throwable ex )
{
if ( ex instanceof ExecutionException )
{
Throwable cause = ex.getCause( );
if ( cause instanceof RuntimeException )
{
// Do not handle RuntimeExceptions
throw cause;
}
if ( cause instanceof MyException )
{
// Intelligent handling of MyException
}
...
}
...
}