2

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

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

4

1 回答 1

7

试试看,yourFrame.setCloseOperation(JFrame.EXIT_ON_CLOSE)

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

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

  • 已调用 Runtime 类的退出方法,并且安全管理器已允许进行退出操作。
  • 所有不是守护线程的线程都已经死亡,要么通过调用 run 方法返回,要么抛出传播到 run 方法之外的异常。

启动“gui-thread”的不是JFrame的创建。该线程在框架变得可见并且可能需要调度事件时启动。

于 2010-08-15T05:16:55.377 回答