2016-10-28 5 views
2

У меня есть код, похожий на что-то вроде этого. У моей задачи кода есть внутренний вызов метода в вызове объекта, который генерирует исключение sql, но я никогда не могу его поймать в службе Executor также чуть выше вызова отправки. У меня есть индикатор прогресса javafx но это также кажется застрявшим, как основной ui зависает при использовании в будущем. без будущего работает индикатор выполнения.Как поймать исключение задачи в приложении java fx?

ответ

4

Future.get является блокирующим вызовом. Вот почему пользовательский интерфейс зависает.

Не используйте значение Future, чтобы получить результат. Вместо этого используйте обработчик событий TaskonSucceeded. Обработчик события onFailed может использоваться для получения исключения. Пример:

t.setOnSucceeded(evt -> System.out.println(t.getValue())); 
t.setOnFailed(evt -> { 
    System.err.println("The task failed with the following exception:"); 
    t.getException().printStackTrace(System.err); 
}); 
executorService.submit(t); 

КСТАТИ: Оба обработчика выполняется на потоке приложения JavaFX и поэтому может быть безопасно использован для модификации пользовательского интерфейса, чтобы показать результат/об ошибке для пользователя.