У меня есть код, похожий на что-то вроде этого. У моей задачи кода есть внутренний вызов метода в вызове объекта, который генерирует исключение sql, но я никогда не могу его поймать в службе Executor также чуть выше вызова отправки. У меня есть индикатор прогресса javafx но это также кажется застрявшим, как основной ui зависает при использовании в будущем. без будущего работает индикатор выполнения.Как поймать исключение задачи в приложении java fx?
2
A
ответ
4
Future.get
является блокирующим вызовом. Вот почему пользовательский интерфейс зависает.
Не используйте значение Future
, чтобы получить результат. Вместо этого используйте обработчик событий Task
onSucceeded
. Обработчик события 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 и поэтому может быть безопасно использован для модификации пользовательского интерфейса, чтобы показать результат/об ошибке для пользователя.