如何防止并行线程中的异常杀死应用程序?

时间:2011-09-27 18:24:48

标签: java exception htmlunit

我正在运行一个HtmlUnit Web自动化应用程序。它通常可以正常工作,但是,有时它会过度使用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 个答案:

答案 0 :(得分:3)

Stackoverflow总是在JVM中出现致命错误,这意味着JVM堆栈内存不足,没有什么可以解决的。

这意味着有一些方法正在递归并烧掉堆栈。

既然你说,当页面上有Javascript时会发生这种情况,我会假设Javascript引起某种递归,尝试更改Javascript逻辑并查看是否修复了Stackoverflow问题,这是你的根本原因并且“解决”这个问题的唯一方法。