protected void processWindowEvent(WindowEvent e) { ///还有这里是干什么的
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      cancel();
    }
    super.processWindowEvent(e);
  }
  
  //Close the dialog
  void cancel() {
    dispose();                ///这一 行dispose(); 是什么啊
  }
  
  //Close the dialog on a button event
  public void actionPerformed(ActionEvent e) {
    if (e.getSource() == button1) {
      cancel();
    }
  }

解决方案 »

  1.   

    JDK都有,为什么不看呢?
    protected void processWindowEvent(WindowEvent e) { ///还有这里是干什么的processWindowEvent
    protected void processWindowEvent(WindowEvent e)处理此窗口上发生的窗口事件,方法是将它们调度到任何注册的 WindowListener 对象。注:只有为此组件启用了窗口事件时,此方法才有可能被调用;如果存在以下条件之一,则发生此情况: 
    通过 addWindowListener 注册 WindowListener 对象 
    通过 enableEvents 启用窗口事件 
    注意,如果此事件参数为 null,则此行为不确定,而且可能导致异常。 
    参数:
    e - 窗口事件
    dispose();                ///这一 行dispose(); 是什么啊dispose
    public void dispose()释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源。即这些 Component 的资源将被破坏,它们使用的所有内存都将返回到操作系统,并将它们标记为不可显示。 
    通过随后对 pack 或 show 的调用重新构造本机资源,可以再次显示 Window 及其子组件。重新创建的 Window 及其子组件的状态在移除 Window 的点上与这些对象的状态将是一样的(不考虑这些操作之间的其他更改)。 注:当 Java 虚拟机 (VM) 中最后的可显示窗口被移除后,虚拟机可能会终止。有关更多信息,请参阅 AWT Threading Issues。 
      

  2.   

    .dispose()不会把对象消亡的!当你再让这个容器显示时,那些对象都还是原来dispose()前的状态!!就算你调用dispose()方法,也不是说马上就回收了这个内存空间了的,它其实只是给这个变量或者类做过标记,告诉回收机制,下次回收线程启动的时候,把他们先回收了而已.