为什么我创建一个JFrame然后程序仍然运行直到(即)我用窗口的小“退出按钮”关闭它?
我找到了这个答案,但我失败了。我唯一猜到的是,当我new JFrame()
时,它就像一个特殊的new
,它在EDT中保留对象的引用,因此它将始终被引用(即使是匿名的“新的“)它不会被垃圾收集器删除。然后,一旦触发了窗口关闭事件,该对象就会被解除引用并被销毁。
答案 0 :(得分:7)
尝试,yourFrame.setCloseOperation(JFrame.EXIT_ON_CLOSE)
。
它继续运行的原因是所谓的事件调度线程在后台继续运行,只要你运行非守护程序线程,应用程序就不会终止。来自线程的文档:
当Java虚拟机启动时,通常会有一个非守护程序线程(通常调用某个指定类的名为main的方法)。 Java虚拟机继续执行线程,直到发生以下任一情况:
- 已调用类Runtime的exit方法,安全管理器已允许退出操作。
- 所有非守护程序线程的线程都已死亡,无论是通过从run方法调用返回还是抛出传播超出run方法的异常。
JFrame的创建不会启动“gui-thread”。当框架变得可见时,该线程就会启动,并且可能需要调度事件。