Java JFrame为什么要继续跑

Java JFrame为什么要继续跑,java,swing,jframe,event-dispatch-thread,Java,Swing,Jframe,Event Dispatch Thread,为什么如果我创建了一个JFrame,那么程序仍然运行,直到我用窗口的小“退出按钮”关闭它 我寻找这个答案,但我失败了。我猜测的唯一一件事是,当我执行newjframe()时,它就像一个特殊的new,在EDT中保留对象的引用,因此它将始终被引用(即使是匿名的“new”),垃圾收集器不会删除它。然后,一旦触发windows关闭事件,对象将被取消引用并销毁。尝试,yourFrame.setCloseOperation(JFrame.EXIT\u ON\u close) 它保持运行的原因是所谓的事件调度

为什么如果我创建了一个JFrame,那么程序仍然运行,直到我用窗口的小“退出按钮”关闭它


我寻找这个答案,但我失败了。我猜测的唯一一件事是,当我执行
newjframe()
时,它就像一个特殊的
new
,在EDT中保留对象的引用,因此它将始终被引用(即使是匿名的“new”),垃圾收集器不会删除它。然后,一旦触发windows关闭事件,对象将被取消引用并销毁。

尝试,
yourFrame.setCloseOperation(JFrame.EXIT\u ON\u close)

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

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

  • 类运行时的exit方法已被调用,并且安全管理器已允许执行exit操作
  • 所有不是守护进程线程的线程都已死亡,要么是通过调用run方法返回,要么是通过抛出传播到run方法之外的异常
启动“gui线程”的不是JFrame的创建。当框架变得可见并且可能需要分派事件时,此线程将启动