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 с одним заголовком.