javaFX webengine修复webengine成功时返回null的getDocument

javaFX webengine修复webengine成功时返回null的getDocument,javafx,javafx-webengine,Javafx,Javafx Webengine,我正在用java为一个大学项目开发一个网络爬虫。 我在一个名为Loader的对象中使用WebEngine。我使用它来下载页面,考虑webengine,使用webengine方法getDocument()获取文档(org.w3c.dom.Document),使用该文档在JavaFX线程内生成解析树(因为webengine文档不能在JavaFX线程外使用)。所有这些操作都在WebEngine Worker上的侦听器中。我还捕获了worker的Failed和Cancelled状态,以生成一个空解析树

我正在用java为一个大学项目开发一个网络爬虫。 我在一个名为Loader的对象中使用WebEngine。我使用它来下载页面,考虑webengine,使用webengine方法getDocument()获取文档(org.w3c.dom.Document),使用该文档在JavaFX线程内生成解析树(因为webengine文档不能在JavaFX线程外使用)。所有这些操作都在WebEngine Worker上的侦听器中。我还捕获了worker的Failed和Cancelled状态,以生成一个空解析树

有时(这不是确定的),当我向webEngine提交一个有效的URL时,它的工作程序进入成功状态,但getDocument方法返回NULL。现在,我要抓住这个特殊的案例,把它当作失败

有没有一种方法可以在java标准库中解决这个问题? 或者是底层WebKit实现中的问题? 另外,webengine是作为原子参考访问的。 代码:在Load(URL)方法中

在侦听器中:

we.get().getLoadWorker().stateProperty().addListener((o, ov, nv) -> {
            if (nv == Worker.State.SUCCEEDED || nv == Worker.State.FAILED || nv == Worker.State.CANCELLED) {
                if(!we.get().getLocation().equalsIgnoreCase("")  && !we.get().getLocation().equalsIgnoreCase("about:blank")) {
                    if (nv == Worker.State.SUCCEEDED) {
                        org.w3c.dom.Document dom = we.get().getDocument();
                        if (dom != null)
                            parser = new Parsing(we.get().getDocument());
                        else
                            nv = Worker.State.FAILED;
                            //THIS: Why on webengine loading completition
                            //the GetDocument() return null, in the  place of the actual document?
                    }
                    downloadRes = nv;
                }
            }
        });
编辑:明确设置JavaScriptEnabled(false)几乎解决了这个问题

we.get().getLoadWorker().stateProperty().addListener((o, ov, nv) -> {
            if (nv == Worker.State.SUCCEEDED || nv == Worker.State.FAILED || nv == Worker.State.CANCELLED) {
                if(!we.get().getLocation().equalsIgnoreCase("")  && !we.get().getLocation().equalsIgnoreCase("about:blank")) {
                    if (nv == Worker.State.SUCCEEDED) {
                        org.w3c.dom.Document dom = we.get().getDocument();
                        if (dom != null)
                            parser = new Parsing(we.get().getDocument());
                        else
                            nv = Worker.State.FAILED;
                            //THIS: Why on webengine loading completition
                            //the GetDocument() return null, in the  place of the actual document?
                    }
                    downloadRes = nv;
                }
            }
        });