【问题标题】:JavaFX WebView throwing an ExceptionJavaFX WebView 抛出异常
【发布时间】:2015-05-07 07:30:29
【问题描述】:

我使用 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;,但没有解决问题。

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

【问题讨论】:

  • 那一刻,当你在 SO 上找到一个问题完全相同但没有答案的问题时......有趣的是,这在我重新布局我的应用程序之前有效,因此它可能需要对布局做一些事情.

标签: java javascript webview


【解决方案1】:

简答

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

长(呃)答案

失败是因为没有设置 WebView 的 ScrollBar 的皮肤。为了避免这种情况,

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

或者,更具体的:

  • WebView 必须附加到场景
  • WebView.applyCss() 一定是被调用的

有一个bug report,不幸的是,它已被关闭且未修复。

我提交了一份新的错误报告(因为无法评论现有的错误报告-.-)并发送给他们an example to reproduce it

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2019-03-25
    • 2017-07-17
    • 2016-06-09
    • 1970-01-01
    • 2011-05-30
    相关资源
    最近更新 更多