以下代码显示了 JDK 9.0.1 (Windows) 中的一个奇怪行为:
对话片段
Dialog<Void> dialog = new Dialog<>();
WebView webView = new WebView();
dialog.getDialogPane().setContent(webView);
webView.getEngine().load("http://docs.oracle.com/javafx/");
dialog.show();
WebView 实际加载,但它不会将 Web 内容呈现到 GUI。
证明片段
我有以下代码(为简单起见,我对其进行了编辑)
private void loadSite(String url) throws IOException {
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
URI uri = URI.create(url);
Map<String, List<String>> headers = new HashMap<>();
CookieHandler.getDefault().put(uri, headers);
webEngine.getLoadWorker().stateProperty()
.addListener((observable, oldValue, newValue) -> {
System.out.println(newValue);
if (newValue == Worker.State.SUCCEEDED) {
System.out.println(cookieManager.getCookieStore().getCookies());
}
});
webEngine.load(url);
}
此代码段用于从完全加载的页面打印 cookie。工作人员到达 State.SUCCEEDED 并打印出 cookie,但 WebView 不呈现网页。
工作片段
我尝试了以下代码片段并且它起作用了,WebView 实际上将网页呈现到 GUI:
Stage stage = new Stage();
final WebView webView = new WebView();
webView.getEngine().load("http://docs.oracle.com/javafx/");
stage.setScene(new Scene(webView));
stage.show();
对话框片段适用于 JDK 8,但不适用于 JDK 9。
并排比较
实际问题
难道我做错了什么?为什么会这样?我阅读了 JDK 9 的一些更改,但没有看到任何相关的内容。
在此先感谢您的合作。