Страницы

Поиск по вопросам

среда, 5 декабря 2018 г.

Обнаружить StackOverflowError в других потоках

Я делаю интерпретатор языка Prolog. Язык основан на рекурсии, и неправильно написанные программы часто приводят к переполнению стека. Когда запускал свой интерпретатор из приложения JavaFX я заметил, что JavaFX может обнаруживать StackOverflowError в потоке и обрабатывать его.
Как самому сделать что-то подобное, чтобы определить StackOverflowError, выброшенный в другом потоке и обработать его?


Ответ

В общем случае я бы посоветовал данную задачу (перехват ожидаемого исключения) возложить на сам поток, но если это не возможно по каким либо причинам:
@Override public void start(Stage primaryStage) { Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
См. setDefaultUncaughtExceptionHandler, UncaughtExceptionHandler
Правка (после предоставления исходных кодов):
Внутри установленного UncaughtExceptionHandler
Platform.runLater(() -> errorsOutput.runtimeException(new RuntimeException("Error in program thread", throwable)));

Комментариев нет:

Отправить комментарий