Задать вопрос
@lague

Как правильно отловить исключения в многопоточном javafx-приложении?

Встал вот какой вопрос. Есть GUI-приложение. В основном потоке соотв. графический интерфейс. Все затратные по времени выполнения операции (такие как запрос к серверу http или БД) отправляются в новый поток (для каждой операции создается свой). Потоки могут бросать исключния, но только первый поток знает как на них реагировать (в некоторых случаях поток можно перезапустить, в каких-от случаях пользователю можно просто показать ошибку чтобы сам решал, что с этим делать). Во время этих операций пользователю показывается поргресс-бар или состояние ткущей опрерации. Соответсвенно, основной тред блокировать нельзя.
Вопрос: как в таких условиях правильно поймать все исключения из потоков и передать их основному потоку на оработку?
  • Вопрос задан
  • 146 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
То что поток может рухнуть уже проблема, ловите исключения внутри потока от ваших функций, тот же запрос к бд\хттп а уже по исключению решать что делать, но ни как не ронять весь поток.
Ответ написан
Комментировать
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
Что-ж, поскольку специалисты молчат, попробую предложить:
// Хотите новый поток - пожалуйста, но я бы рекомендовал что-нибудь типа:
// public static ExecutorService ThreadPool = Executors.newFixedThreadPool(8)
new Thread() {
    @Override
    public void run() {
        Exception exception = null;
        try {
            // затратные по времени выполнения операции (такие как запрос к серверу http или БД)...
        } catch(Exception ex) {
            exception = ex;
        }
        Exception finalException = exception;
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                if (finalException != null) {
                    // Handle exception in UI thread
                } else {
                    // Handle result in UI thread
                }
            }
        });
    }
}.start();

Disclaimer: JavaFX в глаза не видел.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы