【发布时间】:2014-12-29 10:16:36
【问题描述】:
我创建了一个 JavaFX 应用程序,并注意到在我关闭主阶段后,会发生以下情况:
- 应用程序“停止”方法被调用
- main方法继续
- 程序离开main方法后,JVM无法关闭
我不创建任何线程(至少明确地不创建)。此时正在运行的线程是(来自调试控制台):
- InvokeLaterDispatcher
- Prism 字体处理器
- 'pool-2-thread-1'(我不知道这是什么 - ThreadPoolExecutor 部件在它的堆栈跟踪中)
- HSQLDB 计时器(我在开发/调试系统上使用 HSQLDB 文件 db)
- FX 访问线程(可视化调试器)
- 废弃的连接清理线程
哪些线程可以阻止 JVM 关闭?我认为所有这些都应该是守护线程......
这是我的应用程序代码:
public class MainApp extends Application {
@Override
public void start(Stage stage) throws Exception {
final FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/Main.fxml"));
Parent root = fxmlLoader.load();
Scene scene = new Scene(root);
scene.getStylesheets().add("/styles/Styles.css");
//... Scene/stage setup here
stage.show();
}
@Override
public void stop() throws Exception {
super.stop();
}
public static void main(String[] args) {
launch(args);
}
}
添加一个 System.exit(0);在 stop() 方法的最后解决了这个问题,但我不确定这是否是问题的最佳解决方案...... 有什么想法吗?
提前谢谢
【问题讨论】:
标签: java multithreading jvm javafx-8