Информация об изменениях

Сообщение Re: Перехват исключений в desktop app от 10.01.2023 0:44

Изменено 10.01.2023 0:45 vsb

Re: Перехват исключений в desktop app
Здравствуйте, 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.

Как доставить исключение до нужного компонента? Ну проще всего сделать промежуточный класс. В котором можно регистрировать listener-ы для тех, кому интересно получать эти исключения и можно кидать эти самые исключения. И этот класс уже прокинуть в нужные места.
Re: Перехват исключений в desktop app
Здравствуйте, 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-ы для тех, кому интересно получать эти исключения и можно кидать эти самые исключения. И этот класс уже прокинуть в нужные места.