Re: Перехват исключений в desktop app
От: vsb Казахстан  
Дата: 10.01.23 00:44
Оценка: 4 (1) +1
Здравствуйте, cppguard, Вы писали:

C>Как по-нормальному сделать вывод исключений для пользователя в Swing или JavaFx приложении? Допустим, есть элемент типа JTextComponent, куда нужно выводить информацию о всех исключительных ситуациях. Если обернуть приложение извне в try/catch, чтобы перехватывать абсолютно все исключения, то нужно будет пробрасывать путь до места, откуда JTextComponent непосредственно доступен. Получается такой себе код. Если же подниматься на уровень выше, то всегда есть шанс получить RuntimeException где-нибудь ниже.


Я не очень понял, как try-catch всего приложения должен работать в твоей задумке. Думаю — никак. GUI приложение после инициализации исполняет код в коллбэках и всяких вручную запущенных фоновых потоках.

Коллбэки выполняются в свинге в event dispatcher thread. Как там ловить все исключения — https://stackoverflow.com/questions/4448523/how-can-i-catch-event-dispatch-thread-edt-exceptions тут немного написано, думаю, хватит для дальнейшего разбирательства.

В своих потоках — нужно установить Thread.setUncaughtExceptionHandler/Thread.setDefaultUncaughtExceptionHandler.

Про javafx не знаю, думаю примерно так же.

Как доставить исключение до нужного компонента? Ну проще всего сделать промежуточный класс. В котором можно регистрировать listener-ы для тех, кому интересно получать эти исключения и можно кидать эти самые исключения. Эдакий нано-event bus. И этот класс уже прокинуть в нужные места. В идеале через DI, но это уже детали.
Отредактировано 10.01.2023 3:36 vsb . Предыдущая версия . Еще …
Отредактировано 10.01.2023 0:46 vsb . Предыдущая версия .
Отредактировано 10.01.2023 0:46 vsb . Предыдущая версия .
Отредактировано 10.01.2023 0:45 vsb . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.