你直接写Window.dispose(),那可不就是把dispose方法当成一个static方法来调用的吗?如果要把它作为非static方法调用,应该这样:Window  window = new Window();
window.dispose();

解决方案 »

  1.   

    Window类本身未定义dispose()方法,所以它只能调用基类的dispose()方法
    将:
    Window.dispose();
    改为:
    Window.super.dispose();
    就可以了。
    另外new Window.setVisible(true);的写法也不对,改为:
       Window win=new Window();
       win.setVisible(true);
    可以运行
      

  2.   

    按照SHIZUMARU(绯雨闲丸)的意思:直接写Window.dispose()是把dispose方法当成一个static方法来调用,那么heifei()的Window.super.dispose()为什么不是当成static方法来调用?
      

  3.   

    这样写可能更直观:
    ...
    this.addWindowListener(new winAdp(this));
    }
    class winAdp extends WindowAdapter{
    Window win;
    winAdp(Window win){
    this.win=win;
    }
      public void windowClosing(WindowEvent e){
       win.dispose();
       System.Exit(0);
    ...
      

  4.   

    在这里Window.super.dispose()和Window.dispose()不一样,
    内部类可以访问外部类的方法或者非外部类的静态方法。Windows.super.dispose()就是你的Window类从java.awt.Frame-->java.awt.Window继承下来的方法(相当于指定路径:到Window的基类去找。),而Window.dispose()则不然,在你的Window类里找不到这个方法它又不是外部静态方法,所以出错。事实上,完全不指定,将Window.dispose();
    改为: dispose(),编译器会自动搜索到基类的dispose()方法,从而编译通过。
      

  5.   

    内部类访问外部类的方法和访问外部类的对象的方法不同,调用对象的dispose()会调用到超类的方法,但Window.dispose()只调用Window类本身的方法,所以出错了,谢谢指正!