2011-09-27 100 views
0

我正在运行一个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

你越来越stackoverflow的原因将表明你有某种错误的逻辑。你在使用递归吗?或者可能调用了很多方法,并且没有使用足够的设置运行JVM? – LordDoskias

+0

我有时会在HtmlUnit试图解释页面上的JS时获得它。由于我需要带JS的页面,除了编写我自己的JS引擎外,我可以做的事情很少,反正可能会更糟糕。正如我所见,留给我的唯一选择就是解决这个错误。我无法可靠地重现它,当页面重新加载时,它通常会消失 –

回答

3

Stackoverflow在JVM中总是会出现致命错误,这意味着JVM堆栈内存不足,无法解决这个问题。

这意味着有一些方法是递归和吹出堆栈。

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

+0

感谢您的建议 –

相关问题