2010-08-15 88 views
2

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

我找了这个答案,我失败了。我唯一想到的是,当我做new JFrame()时,它就像一个特殊的new,它保留了EDT中对象的引用,所以它总是被引用(即使它是一个匿名的“新”),它不会是被垃圾收集器删除。然后,一旦窗户关闭事件触发,对象被解除引用并销毁。

回答

7

尝试,yourFrame.setCloseOperation(JFrame.EXIT_ON_CLOSE)

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

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

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

这并不是说揭开序幕“GUI线程” JFrame的创建。当框架变得可见并且可能需要分派事件时,该线程被启动。

相关问题