【问题标题】:ClassCastException in webclientWebclient 中的 ClassCastException
【发布时间】:2012-06-25 01:45:06
【问题描述】:

我正在使用 Web 客户端获取页面源。我第一次获得页面源。在我使用相同的对象获取不同 URL 的页面源之后,它显示了一个异常,例如:

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();
        }

提前谢谢

【问题讨论】:

    标签: java webclient


    【解决方案1】:

    它说得很清楚,你的代码正在做:

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

    所以你假设你得到了一个HtmlPage类型的对象,但你实际上得到了一个类型的对象 UnexpectedPage.

    你应该添加一个instanceof的检查:

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

    【讨论】:

      【解决方案2】:

      我假设(不再对库了解太多) UnexpectedPage 是 HtmlPage 的子类型(如果不是 - 这就是您的问题的原因)。

      在这种情况下,您可能在类路径中有两次这些类。虽然 HtmlPage 类的“名称”看起来像合法的超类,但类加载器可以访问两个同名的类并首先加载“另一个”。

      检查(双重检查)HtmlUnit 类在您的类路径中出现两次。

      【讨论】:

        猜你喜欢
        • 2011-08-09
        • 2019-05-12
        • 2014-04-09
        • 2017-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多