黑马程序员技术交流社区

标题: 异常排查 [打印本页]

作者: 胥文    时间: 2013-2-2 11:17
标题: 异常排查
本帖最后由 张向辉 于 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)
感觉代码正常,就是有异常,但是又不知道怎么解决
很烦躁
希望能给点这方面排场异常的经验

作者: 杨杨    时间: 2013-2-2 11:54
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:21
标题: 那个
本帖最后由 黄锦成 于 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工具时,要学会调试
作者: 苏克    时间: 2013-2-2 15:03
Button cancelBut = new Button("取消");
  Button sendBut = new Button("发送");
这样写,相当于按钮是方法里面的,
cancelBut.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e)
   {
    f.setVisible(false);
   }
你这里监听的是类里面的,而类里面的你没有创建实例对象,所以监听就会报空指针异常,也就是监听器没有找到要监听的对象。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2