A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胥文 中级黑马   /  2013-2-2 11:17  /  1286 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-2-4 21:42 编辑

package cn.itcast.day1;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
public class MyQQ {
/**
  * @param args
  */
private Frame f;
private TextArea ta1,ta2;
private Button cancelBut,sendBut;
MyQQ()
{
  init();
}
public void init()
{
  f= new Frame("my qq");
  ta1 = new TextArea(12,65);
  ta2 = new TextArea(12,65);
  Button cancelBut = new Button("取消");
  Button sendBut = new Button("发送");
  
  f.setBounds(200, 100, 500, 550);
  f.setLayout(new FlowLayout());
  
  f.add(ta1);
  f.add(ta2);
  f.add(cancelBut);
  f.add(sendBut);
  
  myEvent();
  f.setVisible(true);
  
}
public void myEvent()
{
  f.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {
    System.exit(0);
   }
   
  });
  cancelBut.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e)
   {
    f.setVisible(false);
   }
  });
}
public static void main(String[] args) {
  // TODO Auto-generated method stub
  new MyQQ();
}
}
结果是:Exception in thread "main" java.lang.NullPointerException
at cn.itcast.day1.MyQQ.myEvent(MyQQ.java:54)
at cn.itcast.day1.MyQQ.init(MyQQ.java:40)
at cn.itcast.day1.MyQQ.<init>(MyQQ.java:22)
at cn.itcast.day1.MyQQ.main(MyQQ.java:63)
感觉代码正常,就是有异常,但是又不知道怎么解决
很烦躁
希望能给点这方面排场异常的经验

4 个回复

倒序浏览
cancelBut.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e)
   {
    f.setVisible(false);
   }
  });
}有问题


new ActionListener(){
   public void actionPerformed(ActionEvent e)
   {
    f.setVisible(true);
   }
  });
new ActionListener(){} 这只是一个接口 接口不能被实例化 ,必须有对应的类你可以用他的子类 ,
对awt这块内容不是太清楚只能帮到你这里了

回复 使用道具 举报

那个

本帖最后由 黄锦成 于 2013-2-2 12:22 编辑

你在MyQQ中定义了两个成员变量private Button cancelBut,sendBut; 此时他俩的默认值为null
你又在init中定义了同名的局部变量,如下面所示,
Button cancelBut = new Button("取消");
Button sendBut = new Button("发送");

这导致了cancelBut,sendBut这两个成员变量没有指向,还是null,你在myEvent中调用了这两个变量,所以就出现了空指针异常。

解决办法:你把
Button cancelBut = new Button("取消");
Button sendBut = new Button("发送");
改为
cancelBut = new Button("取消");
sendBut = new Button("发送");
即可



建议你用eclipse工具时,要学会调试
回复 使用道具 举报
Button cancelBut = new Button("取消");
  Button sendBut = new Button("发送");
这样写,相当于按钮是方法里面的,
cancelBut.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e)
   {
    f.setVisible(false);
   }
你这里监听的是类里面的,而类里面的你没有创建实例对象,所以监听就会报空指针异常,也就是监听器没有找到要监听的对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马