【问题标题】:How to stop WebEngine after closing stage JavaFX?关闭阶段JavaFX后如何停止WebEngine?
【发布时间】:2014-04-21 14:29:08
【问题描述】:

当我使用 WebEngine 创建新阶段以播放来自 YouTube 的视频时,在我关闭它后 - Youtube 继续在背景上播放。如果我使用“Platform.exit” - 它会关闭我所有的 JavaFX 应用程序,但我只想关闭为 YouTube 创建的阶段。

这是我的 YouTube 播放器课程:

public class YouTube_player  {
    public YouTube_player(String url) {
        final Group root = new Group();
        Scene scene = new Scene(root, 820, 480);

        final Stage stage = new Stage();
        final WebView webView = new WebView();
        final WebEngine webEngine = webView.getEngine();
        webEngine.loadContent(url);
        root.getChildren().add(webView);
        stage.centerOnScreen();

        stage.setScene(scene);
        stage.show();
        stage.setOnCloseRequest(new EventHandler<WindowEvent>(){

            @Override
            public void handle(WindowEvent event) {
              //What i should put here to close only this stage.
              //Platform.exit - closes all my stages.
              //webEngine.getLoadWorker().cancel(); - dont stop Youtube )))
            }
        });

    }
}

点击“主舞台”中的按钮后,我的 Youtube 播放器舞台正在创建:

b1.setOnAction(new EventHandler<ActionEvent>() {
    @Override public void handle(ActionEvent event) {
        new YouTube_player(url_video_p1);
    }
});

【问题讨论】:

    标签: java youtube javafx stage javafx-webengine


    【解决方案1】:

    Java 9,对我来说有效:

    webView.getEngine().load("");
    

    【讨论】:

      【解决方案2】:

      你不能dispose webengine,你唯一能做的就是将webEngine的内容设置为null

      webView.getEngine().load(null);

      【讨论】:

      • 如果 WebEngine 卡在 JS 循环中,这将不起作用。有没有办法阻止 ScriptEngine 运行?
      • @Frederic Leitenberger 您是否尝试使用事件处理程序或 CountdownLatch 来终止循环。 Platform.exit() 怎么样?
      • Platform.exit() 不起作用,因为它将关闭整个子系统。因此,当您仍想在其他窗口/视图中使用它时,您不能这样做。如果不重新启动 JVM,就无法从 Platform.exit() 恢复。
      • @AndrewScottEvans 我不知道CountdownLatch 如何停止 JS 脚本(这是 VM 代码)。关于“杀死循环” - 也不知道如何......我知道的唯一方法是中断或杀死线程,但这也可能是不可能的,或者会导致其他不良副作用。
      • 有一件事(我前一阵子注意到)与此有关:似乎任何 JS 脚本在 10 秒后都会静默停止(无论如何)。但在这里也没有多大用处。尝试显示新内容时“等待 10 秒”听起来不合理。而且它默默地停止脚本的事实也是不合理的。它至少应该记录一些东西和/或有一个设置来控制它。
      猜你喜欢
      • 2014-04-07
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 2015-08-03
      • 2013-06-04
      • 2014-12-24
      相关资源
      最近更新 更多