static method can not access non-static member variables.

解决方案 »

  1.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;public class MyExit extends JFrame
    {
    static protected WindowAdapter e=new MyExit().new MyAdapter();
    public static void main(String[] args)
    {
    System.out.println("main");
    JFrame my=new MyExit();
    my.show();
    my.addWindowListener(e);}public MyExit()
    {
    setSize(200,200);
    }class MyAdapter extends WindowAdapter
    {
    public MyAdapter()
    {
    super();
    System.out.println("MyAdapter()");
    }
    public void windowClosing(WindowEvent e)
    {
      System.exit(0); }
    }
    }
    //output 
    //MyAdapter()
    //main
    //说明static protected WindowAdapter e在main之前就会产生,而MyAdapter是内部类,需要由父类来建立它的实例
      

  2.   

    MyAdapter 是个内部类,静态变量和方法不可以直接引用。
    除你的更改方法外
    可重新定义MyAdapter
    static class MyAdapter extends WindowAdapter
    货]
    static protected WindowAdapter e=new MyExit().new MyAdapter();
      

  3.   

    static protected WindowAdapter e=new MyAdapter();取消static,还是报错,为什么
      

  4.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;public class MyExit extends JFrame
    {
    protected WindowAdapter e=new MyAdapter();public static void main(String[] args)
    {
    JFrame my=new MyExit();
    my.addWindowListener(((MyExit)my).e);
    my.show();}public MyExit()
    {
    System.out.println("MyExit()");
    setSize(200,200);
    }class MyAdapter extends WindowAdapter
    {
    public MyAdapter()
    {
    super();
    System.out.println("MyAdapter()");
    }public void windowClosing(WindowEvent e)
    {
      System.exit(0); }
    }
    }
    protected WindowAdapter e=new MyAdapter();//直到你产生了MyExit得实例时才执行,此时MyExit.this 已经存在了