我在JavaFX Sceene构建器中创建了我的RootLayout。它包含BorderPane,并在其中心TabPane中有三个选项卡。在第一个选项卡上我想要WebView。我的RootController包含:
@FXML
private WebView webview;
@FXML
private WebEngine webengine;
我通过它的fx:id和webview变量在RootLayout.fxml中连接了我的WebView。 我在RootLayoutController中的初始化方法是(RootLayout控制器在fxml文件中定义):
@FXML
private void initialize() {
this.webview = new WebView();
this.webengine = this.webview.getEngine();
this.webengine.load("http://www.oracle.com/us/products/index.html");
}
但页面未加载。有什么建议吗?
答案 0 :(得分:2)
这与其他问题重复,但我无法在合理的时间内找到它们。
永远不要初始化使用@FXML
注入的引用。具体来说,既然你有
@FXML
private WebView webview ;
然后做错误
this.webview = new WebView();
这会创建一个WebView
的新实例,它与您在FXML文件中定义的实例不同。因此,当您加载页面时,您将其加载到新的WebView
实例(不是场景图的一部分)中。
此外,我怀疑您实际上是在FXML文件中直接创建WebEngine
。所以我认为你需要:
@FXML
private WebView webview ;
private WebEngine webengine ;
public void initialize() {
this.webengine = this.webview.getEngine();
this.webengine.load("http://www.oracle.com/us/products/index.html");
}
如果您确实在FXML中定义了webengine
,那么您需要
@FXML
private WebView webview ;
@FXML
private WebEngine webengine ;
public void initialize() {
this.webengine.load("http://www.oracle.com/us/products/index.html");
}