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

162
11 июня 2018, 16:20

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

Как самому сделать что-то подобное, чтобы определить StackOverflowError, выброшенный в другом потоке и обработать его?

Answer 1

В общем случае я бы посоветовал данную задачу (перехват ожидаемого исключения) возложить на сам поток, но если это не возможно по каким либо причинам:

@Override
public void start(Stage primaryStage) {
    Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());

См. setDefaultUncaughtExceptionHandler, UncaughtExceptionHandler

Правка (после предоставления исходных кодов):

Внутри установленного UncaughtExceptionHandler:

Platform.runLater(() -> errorsOutput.runtimeException(new RuntimeException("Error in program thread", throwable)));
READ ALSO
Произведение смежных чисел массива

Произведение смежных чисел массива

решал алгоритм и вот встала задача решить алгоритм на вход дается массив чисел надо найти наибольшее произведение смежных чисел я решил...

183
Проблемы с совместной работой EditText и ListView

Проблемы с совместной работой EditText и ListView

На активности есть ListView и EditTextListView с множественным выбором

199
Форматирование и сортировка jstl

Форматирование и сортировка jstl

Имеется таблица "Расписание"

197