我正在研究这个问题的类似例子。我们有一个JavaFX应用程序,它通过以下线程运行一些GUI更新:ScheduledExecutorService::scheduleAtFixedRate。
这类似于其他几个问题。我认为最像我情况的两个是:
然而,我需要解决的问题是下一步。我的目标是一个嵌入式应用程序,没有机会手动终止JVM任务或其他简单的答案,等等。我担心重启是为了一些非常严重的事情。
我们需要确保所有线程都以有序的方式关闭。我想要的是某种回电或事件,让我注册一个清理程序来关闭我的东西?
我在想基类JavaFX中应该有“东西”。应用申请签署契约。
Stop方法是我可以使用的吗?或者当FXMLController停止时,我可以注册以调用它吗?
目前,当我从Netbeans运行JavaFX应用程序时,JVM进程仍然存在。这将停止任何进一步的构建html" target="_blank">脚本并锁定JAR文件。Netbeans为您提供了终止任务的选项。真正的解决方案意味着应用程序/JVM有序地关闭。
(更新)。。。我查看了javafx。用于启动JavaFX应用程序的应用程序类。我实现了一个Stop()方法。在这里,我确保我已经给平台打了电话。退出()。。。
/////
// @see
// -- http://docs.oracle.com/javafx/2/api/javafx/application/Application.html#stop%28%29
//
public void stop()
{
Platform.exit();
}
这并不能解决从NetBeans运行时的问题。有时,您需要单击停止[X]按钮两次,但当您使用kill按钮时,该过程确实会停止。如果您对进度感兴趣,可以将其报告为bug:[bug 245284],这里有一个小的时钟示例来演示这个问题。关闭窗口时,NetBeans进程运行面板仍在“运行”。无法生成,因为JAR文件已锁定。至少我们知道手动终止开发程序。
您可以使用setOnCloseRequest
@Override
public void start(Stage primaryStage) {
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
ThreadPool.shutdown();
}
});
initGui(primaryStage);
initData();
}
我有一个局部的解决方案来覆盖陷入这种情况的开发人员。在JavaFX应用程序(Netbeans Maven JavaFX模板称为“MainApp”)中声明一个stop()方法。当然有问题,但首先是方法。
停止在程序结束时调用。我打电话给Platform.exit()关闭JavaFX运行时。我添加了一个关闭其他活动执行器线程的调用,目前我将其保留在列表中,以测试解决方案。
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
因此,通过注释掉关闭的调用并运行我的JavaFX程序,应用程序完成了但不会退出,Netbean显示了一个正在运行的任务。您需要手动单击Netbean中的杀死按钮。
取消注释关闭()调用。当JavaFX应用程序退出时,它也会从运行作业的Netbean中消失。这似乎是一种解脱。
剩下的问题是:
希望这将有助于下一个面临类似问题的人:-)
问题内容: 我有两个线程:主线程和从主线程生成的线程。 当主线程退出时,整个程序会终止吗? 问题答案: 没有。 当所有非守护程序线程完成时,Java程序终止。 该文档指出: Java虚拟机启动时,通常只有一个非守护程序线程(通常调用某些指定类的名为main的方法)。Java虚拟机将继续执行线程,直到发生以下任何一种情况: 类的方法已被调用,安全管理器已允许进行退出操作。 不是守护程序线程的所有线程
根据文件:https://docs.python.org/3/library/threading.html 线程可以标记为“守护线程”。此标志的意义在于,当只剩下守护进程线程时,整个Python程序将退出。初始值从创建线程继承。可以通过daemon属性或daemon构造函数参数设置该标志。 示例代码: 参考许多其他StackOverflow答案,我不清楚当主线程调用时,守护线程是否被迫关闭
我正在用Python制作一个图形游戏《谁想成为百万富翁》。我希望用户有45秒的时间回答每个问题。然而,每当我在代码中放置一个计时器时,它会先等待45秒,然后让用户回答,而不是在后台运行,同时让用户回答。
我通过创建固定数量的线程来使用执行器服务来进行HTTP GET数据检索。 当Tomcat停止时,我们会出现以下错误: 严重:web应用程序[/viewer]似乎已启动名为[ThreadExecutor_51616156]的线程,但未能停止该线程。这很可能会造成内存泄漏。 这是真的吗?在没有这些服务错误的情况下,如何正确停止tomcat。
motioncfp.java: