当JavaFX运行时退出时,如何终止调度线程?
我正在研究这个问题的类似例子。我们有一个JavaFX应用程序,它通过以下线程运行一些GUI更新:ScheduledExecutorService::scheduleAtFixedRate 这与其他几个问题类似。我认为与我的处境最相似的两个方面是:当JavaFX运行时退出时,如何终止调度线程?,java,multithreading,javafx-2,Java,Multithreading,Javafx 2,我正在研究这个问题的类似例子。我们有一个JavaFX应用程序,它通过以下线程运行一些GUI更新:ScheduledExecutorService::scheduleAtFixedRate 这与其他几个问题类似。我认为与我的处境最相似的两个方面是: 然而,我需要解决的问题是下一步。我的目标是一个嵌入式应用程序,没有机会手动终止JVM任务或其他简单的答案,等等。我担心重新启动是为了一些非常严重的事情 我们需要确保以有序的方式关闭所有线程。我要找的是某种回电或事件,让我注册一个清理程序来关闭我
- 欢迎您的建议李>
- 见:
public class MainApp extends Application
{
@Override
public void start(Stage stage) throws Exception
{
.....
}
/**
* Close down the application
* @see
* -- http://docs.oracle.com/javafx/2/api/javafx/application/Application.html#stop%28%29
**/
@Override
public void stop()
{
Platform.exit();
for( ScheduledExecutorService sched : activeExecutorServices )
{
sched.shutdown();
}
}
}//MainAppl class
因此,通过注释掉shutdown调用并运行我的JavaFX程序,应用程序完成但不会退出,Netbeans显示一个正在运行的任务。您需要手动单击Netbeans中的kill按钮
取消对shutdown()调用的注释。当JavaFX应用程序退出时,它也会从运行作业的Netbeans中显示。这似乎是一种再洗剂
其余问题:
希望这将有助于下一个面临类似问题的人:-)我有一个部分解决方案,以涵盖陷入这种情况的其他开发人员。在JavaFX应用程序中声明一个stop()方法(Netbeans Maven JavaFX模板称为“MainApp”。当然有问题,但首先是方法
- 见:
public class MainApp extends Application
{
@Override
public void start(Stage stage) throws Exception
{
.....
}
/**
* Close down the application
* @see
* -- http://docs.oracle.com/javafx/2/api/javafx/application/Application.html#stop%28%29
**/
@Override
public void stop()
{
Platform.exit();
for( ScheduledExecutorService sched : activeExecutorServices )
{
sched.shutdown();
}
}
}//MainAppl class
因此,通过注释掉shutdown调用并运行我的JavaFX程序,应用程序完成但不会退出,Netbeans显示一个正在运行的任务。您需要手动单击Netbeans中的kill按钮
取消对shutdown()调用的注释。当JavaFX应用程序退出时,它也会从运行作业的Netbeans中显示。这似乎是一种再洗剂
其余问题:
希望这能帮助下一个面临类似问题的人:-)您可以使用setOnCloseRequest
@Override
public void start(Stage primaryStage) {
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
ThreadPool.shutdown();
}
});
initGui(primaryStage);
initData();
}
@覆盖
公共无效开始(阶段primaryStage){
setOnCloseRequest(新的EventHandler()){
@凌驾
公共无效句柄(WindowEvent事件){
ThreadPool.shutdown();
}
});
initGui(初级阶段);
initData();
}
您可以使用setOnCloseRequest
@Override
public void start(Stage primaryStage) {
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
ThreadPool.shutdown();
}
});
initGui(primaryStage);
initData();
}
@覆盖
公共无效开始(阶段primaryStage){
setOnCloseRequest(新的EventHandler()){
@凌驾
公共无效句柄(WindowEvent事件){
ThreadPool.shutdown();
}
});
initGui(初级阶段);
initData();
}
只有在关闭后台和退出应用程序完全相同的情况下才有效,但这并不适用于所有应用程序。只有在以下情况下才有效