在Java中"this"可不可以做为事件源。如:this.addWindowListener(new WinC());
在编译时出现:KeysEvent.java:22: 无法从静态上下文中引用非静态 变量 this
this.addWindowListener(new WinC());
这是怎么回事?
在编译时出现:KeysEvent.java:22: 无法从静态上下文中引用非静态 变量 this
this.addWindowListener(new WinC());
这是怎么回事?
解决方案 »
- struts1中的action代码在struts2中的写法(新手请教,望详解)
- 求知识,有没有什么方法能获得ActionForm中get方法个数的??
- 更新一条记录,用statement.executeUpdate 返回值是0 但其实已更新成功!
- spring注入的疑问
- 请指教
- 急,一个关于模糊查询的问题,求高手指教啊.(在线等待)
- 大家推荐下有哪些实用的JAVA工具类
- 我的tomcat怎么不能运行?
- 急需 JB4--8下载及serialNumber and Key,送分!!
- 仿微信服务器~ 打造分布式高并发IM即时通讯服务器。内附openfire的简短分析。以及微信服务器的分析
- ejb2.0是怎么做CRUD
- 请教一个spring给bean注入数组的问题
public class MyBtn extends JButton implements ActionListener {
public MyBtn() {
this.addActionListener(this);
} @Override
public void actionPerformed(ActionEvent e) {
}
}// 上述代码没进IDE看,打错字勿怪。
import java.awt.*;
import java.awt.event.*;public class Painting extends Frame
{
public Painting()
{
super("Painting");
setSize(200,150);
setVisible(true);
this.addWindowListener(new WinClos());
} public static void main(String args[])
{
Painting app=new Painting();
} public void paint(Graphics g)
{
g.setColor(Color.red);
g.drawLine(50,50,150,50);
g.drawRect(50,70,100,50);
Font fnt=new Font("dialog",Font.ITALIC+Font.BOLD,15);
g.setFont(fnt);
g.drawString("Painting",70,100);
} static class WinClos extends WindowAdapter
{
public void closing(WindowEvent e)
{
System.exit(0);
}
}
}
静态方法不能调用实例化的对象成员
也就是说有static就没有this
import java.awt.event.*;public class Painting extends Frame
{
public Painting()
{
super("Painting");
setSize(200,150);
setVisible(true);
this.addWindowListener(new WinClos());
} public static void main(String args[])
{
Painting app=new Painting();
} public void paint(Graphics g)
{
g.setColor(Color.red);
g.drawLine(50,50,150,50);
g.drawRect(50,70,100,50);
Font fnt=new Font("dialog",Font.ITALIC+Font.BOLD,15);
g.setFont(fnt);
g.drawString("Painting",70,100);
} static class WinClos extends WindowAdapter
{
public void closing(WindowEvent e)
{
System.exit(0);
}
}
}也就是说我静态的main()方法引用了非静态的this?
static class WinClos extends WindowAdapter改成:
class WinClos extends WindowAdapter就可以了
这怎么能行呢?你这样改了之后,那this.addWindowListener(new WinClos())
不成了静态的main()方法来引用非静态的WinClos类了。
但是你可以在方法中new 一个实例,实例对象是可以调用实例方法的。
跟main是不是静态没关系。
去掉static class WinClos extends WindowAdapter里面的static应该就没问题了。
只是当关闭按钮的时候,不起作用。如果要让关闭按钮起作用,应该这样写:
import java.awt.*;
import java.awt.event.*;public class Painting extends Frame {
public Painting() {
super("Painting");
setSize(200, 150);
setVisible(true);
//this.addWindowListener(new WinClos());
} public static void main(String args[]) {
Painting app = new Painting();
app.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
} public void paint(Graphics g) {
g.setColor(Color.red);
g.drawLine(50, 50, 150, 50);
g.drawRect(50, 70, 100, 50);
Font fnt = new Font("dialog", Font.ITALIC + Font.BOLD, 15);
g.setFont(fnt);
g.drawString("Painting", 70, 100);
} /*static class WinClos extends WindowAdapter {
public void closing(WindowEvent e) {
System.exit(0);
}
}*/
}以上代码是可以运行的。请楼主看看吧。有什么事情,可以给我留言,希望我们多多交流,大家才可以共同提高,对吧?!