JFrame以及为什么要继续运行

为什么我创建一个JFrame然后程序仍然运行,直到(即)我用窗口的小“退出按钮”关闭它?

我寻找这个答案但我失败了。 我猜到的唯一的事情就是当我做new JFrame()它就像一个特殊的new ,它在EDT中保留了对象的引用,所以它总是被引用(即使它是一个匿名的“new”)而且它不是将被垃圾收集器删除。 然后,一旦触发了窗口关闭事件,就会取消引用并销毁该对象。

试试, yourFrame.setCloseOperation(JFrame.EXIT_ON_CLOSE)

它继续运行的原因是所谓的事件调度线程在后台继续运行,只要你运行非守护程序线程,应用程序就不会终止。 从线程的文档:

当Java虚拟机启动时,通常会有一个非守护程序线程(通常调用某个指定类的名为main的方法)。 Java虚拟机继续执行线程,直到发生以下任一情况:

  • 已调用类Runtime的exit方法,并且安全管理器已允许执行退出操作。
  • 所有不是守护程序线程的线程都已经死亡,无论是通过从run方法调用返回还是抛出一个超出run方法传播的exception。

这并不是JFrame的创造 ,而是开启了“gui-thread”。 当框架变得可见并且可能需要调度事件时,将启动此线程。