javaFX webengine修复webengine成功时返回null的getDocument
我正在用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)方法中 在侦听器中: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状态,以生成一个空解析树
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;
}
}
});