java - 使用 JavaFX 的 WebView NullPointerException

标签 java webview javafx

最近向我的 JavaFX 应用程序添加了一个 WebView Pane 。调整我的程序大小时出现此错误并且程序卡住。

java.lang.NullPointerException
    at com.sun.javafx.webkit.prism.WCPageBackBufferImpl.validate(WCPageBackBufferImpl.java:97)
    at com.sun.webkit.WebPage.paint(WebPage.java:644)
    at com.sun.javafx.sg.prism.NGWebView.renderContent(NGWebView.java:95)
    at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2067)
    at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1959)
    at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235)
    at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576)
    at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2067)
    at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1959)
    at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235)
    at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576)
    at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2308)
    at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2202)
    at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2228)
    at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2061)
    at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1959)
    at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235)
    at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576)
    at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2308)
    at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2202)
    at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2228)
    at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2061)
    at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1959)
    at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:474)
    at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:327)
    at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
    at java.lang.Thread.run(Thread.java:745)

webview去的网站是

http://www.abendigo.org/gui/

有人能告诉我是什么原因导致这个问题吗?

编辑:不确定为什么需要这样做,但这里是请求的代码:

public class Controller implements Initializable {

    @FXML
    public WebView webView;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        webView.getEngine().load("http://abendigo.org/gui/");
    }

}

bug重现视频: https://youtu.be/6CLPt45AbW0

最佳答案

我遇到了同样的错误。很难找到原因。 最后,我发现:当宽度或高度太大,即超过 8500 像素时,webView 布局会抛出 nullPointerExpection。

好的绕过是将 webView 的 maxWidth/maxHeight 限制为场景大小:

 webView.sceneProperty().addListener(new ChangeListener<Scene>() {

        @Override
        public void changed(ObservableValue<? extends Scene> observable, Scene oldValue, Scene scene) {
            if (scene != null) {
                webView.setMaxSize(getScene().getWidth(), getScene().getHeight());
                webView.maxWidthProperty().bind(getScene().widthProperty());
                webView.maxHeightProperty().bind(getScene().heightProperty());
            } else {
                webView.maxWidthProperty().unbind();
                webView.maxHeightProperty().unbind();
            }
        }
    });

关于java - 使用 JavaFX 的 WebView NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31910554/

相关文章:

java - 断言文件已在 Junit (Java 6) 中创建

java - XML 格式的 Web View 位于主栏下方

android - 如何检测android中webview是否存在缓存?

java - 如何从 javafx 中的事件处理程序返回结果?

JavaFX:将 TextProperty(例如标签)绑定(bind)到一个简单的整数

java - logback 显示带有行号的日志

java - do-while(false) 的优点是什么?

Java 继承 - 查找总数

webview - 我可以在 VSCode 的 webview 中包含默认编辑器吗?

带有 VSCode 的 JavaFX-11