添加一个 ChangeListener 以在加载 Web 引擎时隐藏进度指示器

Adding a ChangeListener to hide progress indictor when the WebEngine has loaded

我正在尝试使用 JavaFX 在等待视频加载时显示进度指示器。

我已经能够通过阅读其他帖子拼凑出以下代码。

但是我不确定为什么进度指示器没有显示?视频加载需要 3-4 秒,而视频加载时我看到的只是白框。

我导入了这两个库。

导入javafx.beans.value.ChangeListener

进口javafx.beans.value.ObservableValue

如有任何帮助,我们将不胜感激。

                HBox videoBox = new HBox();
                centerGridMain.add(videoBox, 6, 2);
                videoBox.setEffect(new DropShadow());

                ProgressIndicator pi = new ProgressIndicator();

                WebEngine webEngine = new WebEngine();
                WebView webView = new WebView();
                webEngine=webView.getEngine();
                webEngine.load("https://www.youtube.com/embed/ER8-WJxoItE");
                videoBox.getChildren().addAll(webView, pi);
                pi.progressProperty().bind(webEngine.getLoadWorker().progressProperty());
                
            
                webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {

                    @Override
                    public void changed(ObservableValue<? extends State> ov, State oldState, State newState) {
                        // TODO Auto-generated method stub
                        if (newState == State.SUCCEEDED) {
                            pi.setVisible(false);
                        }

                        else {
                            pi.setVisible(true);
                        }

                    }
                });


我最终这样做了并且得到了预期的结果。

       HBox videoBox = new HBox();
        centerGridMain.add(videoBox, 6, 2);
        videoBox.setEffect(new DropShadow());

        ProgressIndicator pi = new ProgressIndicator();

        WebEngine webEngine = new WebEngine();
        WebView webView = new WebView();
        webEngine=webView.getEngine();
        webEngine.load("https://www.youtube.com/embed/ER8-WJxoItE");
        videoBox.getChildren().addAll(pi);
        pi.progressProperty().bind(webEngine.getLoadWorker().progressProperty());
        
    
        webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {

            @Override
            public void changed(ObservableValue<? extends State> ov, State oldState, State newState) {
                // TODO Auto-generated method stub
                if (newState == State.SUCCEEDED) {
                    videoBox.getChildren().addAll(webView);;
                }

                else {
                    pi.setVisible(true);
                }

            }
        });