import java.awt.*;
import java.awt.event.*;
public class FrameTest1
{
public static void main(String argv[])
{
Frame f1 = new Frame();
Frame f2 = new Frame("My Frame 2");
        f1.addWindowListener(new WindowEventHandler());
        f2.addWindowListener(new WindowEventHandler());
f1.setSize(100,200);
f2.setSize(200,100);
f1.setVisible(true);
f2.setVisible(true);
}
}
class WindowEventHandler extends WindowAdapter 
{ public void windowClosing(WindowEvent e)
{
System.out.println("Window Closing event");
System.exit(0);
}
}这个程序是正确的
但是下面的程序却出现一个问题
import java.awt.*;
import java.awt.event.*;public class FrameTest1
{
public static void main(String argv[])
{
Frame f1 = new Frame();
Frame f2 = new Frame("My Frame 2");
        f1.addWindowListener(new WindowEventHandler());
        f2.addWindowListener(new WindowEventHandler());
f1.setSize(100,200);
f2.setSize(200,100);
f1.setVisible(true);
f2.setVisible(true);
}class WindowEventHandler extends WindowAdapter 
{ public void windowClosing(WindowEvent e)
{
System.out.println("Window Closing event");
System.exit(0);
}
}} //WindowEventHandler类在FrameTest1类里面了
   
“ 无法从静态上下文中引用非静态 变量 this
        f2.addWindowListener(new WindowEventHandler());”
为什么会出现这样的问题哦 !!!!

解决方案 »

  1.   

    第二种写法会报错,
    main方法是一个static类,也就是说FrameTest1 类在不创建实例的情况下就可以调用main方法了。而在main方法里,你又去new 内部类的对象,但非静态内部类的存在与其外部类相关。
    此时调用main方法的时候,就是没有创建内部类的实力,所以才报错的。
      

  2.   

    这样写可以的:
    f1.addWindowListener(new FrameTest1().new WindowEventHandler());
    f2.addWindowListener(new FrameTest1().new WindowEventHandler());
      

  3.   

    汗   我怎么问了这么一个弱智问题啊  类里面怎么可能再定义一个类呢             WindowEventHandler类可以在FrameTest1类里面么???   不可以吧!!!!  我真粗心啊....