2015-05-07 3 views
1

Я использую JavaFX WebView в качестве «чата-контейнера» для сообщений.JavaFX WebView бросает исключение

Everytime новое сообщение приходит, я называю:

engine.executeScript("window.scrollTo(0, document.body.scrollHeight);"); 

(у меня также есть чек, если-, так что я не выполнить строку, если пользователь прокрутил вверх)

Однако , эта строка, как представляется, вызывает исключение каждый раз, когда полоса прокрутки не видна, потому что полоса прокрутки, по-видимому, лениво инициализирована.

java.lang.NullPointerException 
    at com.sun.javafx.webkit.theme.ScrollBarThemeImpl.getThumb(ScrollBarThemeImpl.java:400) 
    at com.sun.javafx.webkit.theme.ScrollBarThemeImpl.thumbPosition(ScrollBarThemeImpl.java:284) 
    at com.sun.javafx.webkit.theme.ScrollBarThemeImpl.getThumbPosition(ScrollBarThemeImpl.java:380) 
    at com.sun.webkit.WebPage.twkExecuteScript(Native Method) 
    at com.sun.webkit.WebPage.executeScript(WebPage.java:1427) 
    at javafx.scene.web.WebEngine.executeScript(WebEngine.java:948) 

Я попытался добавить еще один чек, если в JavaScript: document.body.scrollHeight > document.body.clientHeight;, но не решить проблему.

У кого-нибудь есть идеи, как избавиться от исключения (помимо подачи отчета об ошибке :)?

+1

Этот момент, когда вы находите вопрос о SO с точно такой же проблемой, но не отвечаете ... Интересно, что это сработало до того, как я снова разместил свое приложение, чтобы он мог что-то сделать с компоновкой. –

ответ

0

Короткий ответ

if (scene != null 
    && scene.getWindow() != null 
     && scene.getWindow().isShowing()) { 
    engine.executeScript("window.scrollTo(0, document.body.scrollHeight);"); 
} 

Long (вдовцы) ответ

Это терпит неудачу, потому что кожа WebView в ScrollBar в не был установлен. Чтобы избежать этого,

  • WebView должен быть присоединен к эпизоду
  • Сцена должна быть прикреплена к окну
  • Окно должно было отображаться, по меньшей мере один раз

или, более конкретны:

  • WebView должен быть присоединен к Scene
  • WebView.applyCss() должны были названы

Существует bug report, который, к сожалению, был закрыт нефиксированной.

Я отправил новый отчет об ошибке (потому что невозможно прокомментировать существующие -.-) и отправил их an example to reproduce it.

Смежные вопросы