Как предотвратить исключение в параллельных потоках приложения? - PullRequest
0 голосов
/ 27 сентября 2011

Я использую приложение веб-автоматизации HtmlUnit.Обычно он работает правильно, однако иногда он выходит за рамки StackOverflowError.Обычно это происходит где-то в его потоке JS, и, следовательно, я не могу поймать его, окружив оператор try..catch.

В таком виде, каждый раз, когда я получаю StackOverflow, приложение вылетает.Я пытался сделать это с

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {

        @Override
        public void uncaughtException(Thread t, Throwable e) {
            System.out.println("Uncaught exception in thread :"+t.getName());
            e.printStackTrace();    
            scr = new HtmlUnitWrapper();
        }
    });

, но приложение продолжает падать.

Есть ли что-нибудь еще, что я могу сделать, чтобы перехватывать и обрабатывать исключения?

1 Ответ

3 голосов
/ 27 сентября 2011

Stackoverflow всегда будет фатальной ошибкой в ​​JVM, это означает, что стеку JVM не хватает памяти, вы ничего не можете сделать, чтобы это исправить.

Это значитчто есть какой-то метод, который рекурсирует и уничтожает стек.

Поскольку вы говорите, что это происходит, когда на странице присутствует Javascript, я предполагаю, что Javascript вызывает некоторую рекурсию, попробуйте изменитьлогику Javascript и посмотрите, решает ли это проблему Stackoverflow, это ваша основная причина и единственный способ «исправить» эту проблему.

...