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());”
为什么会出现这样的问题哦 !!!!
main方法是一个static类,也就是说FrameTest1 类在不创建实例的情况下就可以调用main方法了。而在main方法里,你又去new 内部类的对象,但非静态内部类的存在与其外部类相关。
此时调用main方法的时候,就是没有创建内部类的实力,所以才报错的。
f1.addWindowListener(new FrameTest1().new WindowEventHandler());
f2.addWindowListener(new FrameTest1().new WindowEventHandler());