关闭阶段JavaFX后如何停止WebEngine?
Posted
技术标签:
【中文标题】关闭阶段JavaFX后如何停止WebEngine?【英文标题】:How to stop WebEngine after closing stage JavaFX? 【发布时间】: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);
);
【问题讨论】:
【参考方案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 秒”听起来不合理。而且它默默地停止脚本的事实也是不合理的。它至少应该记录一些东西和/或有一个设置来控制它。以上是关于关闭阶段JavaFX后如何停止WebEngine?的主要内容,如果未能解决你的问题,请参考以下文章
JavaFX 8 WebEngine:如何从 javascript 获取 console.log() 到 java 中的 System.out?