JFrame以及为什么要继续运行

时间:2010-08-15 05:07:27

标签: java swing jframe event-dispatch-thread

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

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

1 个答案:

答案 0 :(得分:7)

尝试,yourFrame.setCloseOperation(JFrame.EXIT_ON_CLOSE)

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

  

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

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

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