为什么即使在loadContent(...)之后Document也为null? - (WebView JavaFx)

时间:2015-09-20 10:41:55

标签: java webview javafx

以下是MainController类初始化(...)方法的简单代码:

WebEngine webEngine = webView.getEngine();
webEngine.loadContent("<h1>hello</h1>"); // Successfully loaded on form
Document doc = webEngine.getDocument(); // null 

为什么 doc null 以及如何修复它?

2 个答案:

答案 0 :(得分:7)

正如我评论的那样,你应该添加一个监听器,因为加载需要时间,一旦内容成功加载就会执行:

final WebView webView = new WebView();
final WebEngine webEngine = webView.getEngine();
webEngine.getLoadWorker().stateProperty().addListener((observable, oldState, newState) -> {
    if (newState == State.SUCCEEDED) {
        Document doc = webEngine.getDocument();
    }
});
webEngine.loadContent("<h1>hello</h1>");
//webEngine.load("http://google.ch"); // This works too

答案 1 :(得分:0)

有时,即使成功加载,引擎也会将文档设置为null。 这通常发生在更复杂的网页上。

确保文档不为null的更可靠方法是使用属性侦听器。

import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import org.w3c.dom.Document;

class MyClass {

    private WebView view = new WebView();
    private WebEngine engine = view.getEngine();
    private Document document;

    MyClass() {
        engine.documentProperty().addListener((v, o, n) -> {
            if (n != null) {
                document = n;
            }
        });
    }
}