2011-09-27 39 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

感謝您的建議 –