退出后,JavaFX 8 JVM仍然存在

时间:2014-12-29 10:16:36

标签: java multithreading jvm javafx-8

我创建了一个JavaFX应用程序,并注意到在关闭主阶段后,会发生以下情况:

  • 应用程序"停止"方法叫做
  • 主要方法继续
  • 程序离开main方法后,JVM无法关闭

我不创建任何线程(至少明确没有)。此时运行的线程(来自调试控制台):

  • InvokeLaterDispatcher
  • Prism字体处理器
  • '池-2-线程1' (我不知道这是什么 - ThreadPoolExecutor部件在其堆栈跟踪中)
  • HSQLDB Timer(我在开发/调试系统上使用HSQLDB文件db)
  • FX访问线程(Visual Debugger)
  • 弃用连接清理线程

哪些线程可以阻止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()方法结束时解决了这个问题,但我不确定这是否是问题的最佳解决方案...... 有什么想法吗?

提前谢谢

1 个答案:

答案 0 :(得分:1)

您说您使用的是HSQLDB,但是您没有显示初始化它的代码。在stop()方法中,关闭该连接。