2012-06-22 28 views
4

我正在使用Web客戶機獲取頁面源。我第一次獲得頁面源代碼。之後,我使用相同的對象用於獲取網頁源代碼爲不同的URL它顯示了異常,如:Web客戶機中的ClassCastException

java.lang.ClassCastException: com.gargoylesoftware.htmlunit.UnexpectedPage cannot be cast to com.gargoylesoftware.htmlunit.html.HtmlPage 

這是我使用的代碼。

HtmlPage firstPage = webClient.getPage("firsturl"); 
HtmlPage downloadPage = null; 
     try { 
      webClient.setJavaScriptEnabled(true); 

      downloadPage = (HtmlPage) webClient.getPage("secondurl"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

提前THX

回答

1

它說它很清楚,你的代碼是這樣做的:

downloadPage = (HtmlPage) webClient.getPage("secondurl"); 

所以你認爲你得到HtmlPage類型的對象,但你實際上得到 UnexpectedPage類型的對象。

您應該添加的instanceof的檢查:

If (webClient.getPage("secondurl") instanceof HtmlPage){ 
downloadPage = (HtmlPage) webClient.getPage("secondurl"); 
} 
else{ 
//do something 
} 
1

我認爲(不知道圖書館太清楚了)那UnexpectedPage是HtmlPage的子類型(如果它不是 - 這是對原因的問題)。

在這種情況下,您可能在類路徑中有兩次這些類。雖然類HtmlPage的「名稱」看起來像合法的超類,但是類加載器可以訪問兩個同名的類,並首先加載「其他」類。

檢查(雙重檢查)HtmlUnit類在您的類路徑中出現兩次。