JavaFX WebView не отображает визуальный контент в диалоге<T>

Следующий код демонстрирует странное поведение в 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 фактически загружается, но не отображает веб-контент в 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, и куки печатаются, но 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();

Фрагмент Dialog работает с JDK 8, но не с JDK 9.

Бок о бок сравнение

Фрагмент сцены слева, Диалоговое окно справа Фрагмент сцены слева, Диалоговое окно справа

Актуальный вопрос

Я делаю что-то неправильно? почему это происходит? Я прочитал некоторые изменения JDK 9, но я не увидел ничего подходящего.

Заранее спасибо за любое сотрудничество.

1 ответ

У меня аналогичная проблема с отображением содержимого в JfxPanel, и он отображается пустым, но содержимое HTML можно распечатать в моей консоли java. (Я использую JxBrowser, но они очень похожи)

Я решил проблему, изменив режим рендеринга webEngine с Heavy Weight на Light Weight.

По сути, компоненты Swing/JavaFx по большей части легкие, если мы поместим тяжелый компонент в легкий, у него возникнут проблемы с рендерингом. Надеюсь это поможет!

У меня точно такая же проблема. Когда я показываю WebView в другом контексте (например, в TabView (внутри Tab)), HTML-файл отображается правильно. Но когда я использую

dialog.getDialogPane().setContent(webView);

это не. Мой код в значительной степени такой же, как приведенный выше фрагмент диалога (за исключением расположения HTML-файла), и я не могу понять проблему.

Не отображается даже простой HTML с одним заголовком.

Другие вопросы по тегам