JavaFX WebView抛出异常

时间:2015-05-07 07:30:29

标签: java javascript webview

我正在使用JavaFX WebView作为"聊天容器",用于消息。

每当有新消息出现时,我都会打电话:

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

(我也有if-check,所以如果用户向上滚动,我就不会执行该行)

但是,每次滚动条不可见时,此行似乎会导致异常,因为滚动条显然是懒惰地初始化。

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中添加另一个if-check:document.body.scrollHeight > document.body.clientHeight;,但它没有解决问题。

任何人都有想法如何摆脱异常(除了提交错误报告:)?

1 个答案:

答案 0 :(得分:0)

简短回答

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

长(呃)回答

它失败了,因为尚未设置WebView的ScrollBar皮肤。为了避免这种情况,

  • 必须将WebView附加到场景
  • 场景必须附加到窗口
  • 窗口必须至少显示一次

OR,更具体:

  • 必须将WebView附加到场景
  • WebView.applyCss()必须被称为

有一个bug report遗憾地被关闭了。

我提交了一个新的错误报告(因为无法评论现有的错误报告),并发送了an example to reproduce it