3

以下代码显示了 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 的一些更改,但没有看到任何相关的内容。

在此先感谢您的合作。

4

2 回答 2

1

我有完全相同的问题。当我在另一个上下文中显示 WebView 时(例如在 TabView 中(在选项卡内)),HTML 文件会正确显示。但是当我使用

dialog.getDialogPane().setContent(webView);

它不是。我的代码与上面的对话框片段几乎相同(HTML 文件的位置除外),我无法找出问题所在。

甚至没有显示只有一个标题的简单 HTML。

于 2017-12-22T07:53:39.540 回答
1

我在将内容呈现到 JfxPanel 时遇到了类似的问题,它呈现为空白,但 HTML 内容可以在我的 Java 控制台中打印。(我正在使用 JxBrowser 但它们非常相似)

我通过将webEngine 渲染模式从 Heavy Weight 设置为 Light Weight解决了这个问题。

本质上,Swing/JavaFx 组件大部分都是轻量级的,如果我们在轻量级组件中堆叠一个重量级的组件,则会出现渲染问题。希望这可以帮助!

于 2019-06-05T15:35:19.677 回答