Java 为什么我的程序会导致多个空指针异常?

Java 为什么我的程序会导致多个空指针异常?,java,pointers,exception,nullpointerexception,Java,Pointers,Exception,Nullpointerexception,这个程序是一个正在进行的tic tac toe游戏,我只做了按钮;至少在理论上是这样。在发布这篇文章之前,我查阅了“空指针异常”,但仍然不明白它在这里是如何应用的。帮忙 //this line is line four public class TicTacToe extends JFrame { public static void main(String[] args) { new TicTacToe(); } public TicTacToe(){ super.

这个程序是一个正在进行的tic tac toe游戏,我只做了按钮;至少在理论上是这样。在发布这篇文章之前,我查阅了“空指针异常”,但仍然不明白它在这里是如何应用的。帮忙

//this line is line four
public class TicTacToe extends JFrame {
  public static void main(String[] args) {
    new TicTacToe();
  }
  public TicTacToe(){
    super.setTitle("Tic Tac Toe");
    super.setSize(800, 800);
    super.setDefaultCloseOperation(EXIT_ON_CLOSE);
    buildPanel();
    super.setVisible(true);
  }
  public void buildPanel(){
    GridLayout g = new GridLayout(3,3);
    JPanel p = new JPanel();
    p.setLayout(g);
    JButton [] buttons = new JButton[9];
    //I'm adding text temporarily to help me see where each button's position
    buttons[0] = new JButton("One");
    p.add(buttons[0]);
    buttons[1] = new JButton("Two");
    p.add(buttons[1]);
    buttons[2] = new JButton("Three");
    p.add(buttons[2]);
    buttons[3] = new JButton("Four");
    p.add(buttons[3]);
    buttons[4] = new JButton("Five");
    p.add(buttons[4]);
    buttons[5] = new JButton("Six");
    p.add(buttons[5]);
    buttons[6] = new JButton("Seven");
    p.add(buttons[6]);
    buttons[7] = new JButton("Eight");
    p.add(buttons[8]);
    buttons[8] = new JButton("Nine");
    p.add(buttons[8]);

    add(p);

    ActionListener Callback = event -> {
      String label = event.getActionCommand();

    };
    for (int i=0;i<buttons.length;i++){
      String string="O";
      if (i%2==0){
        string = "X";
      }
      buttons[i].setText(string);
      buttons[i].addActionListener(Callback);
    }
  }
}
//这一行是第四行
公共类TicTacToe扩展JFrame{
公共静态void main(字符串[]args){
新的TicTacToe();
}
公共交通{
超级标题(“Tic Tac Toe”);
超级设置大小(800800);
super.setDefaultCloseOperation(关闭时退出);
buildPanel();
super.setVisible(true);
}
公共建筑面板(){
GridLayout g=新的GridLayout(3,3);
JPanel p=新的JPanel();
p、 设置布局(g);
JButton[]按钮=新JButton[9];
//我暂时添加文本以帮助我查看每个按钮的位置
按钮[0]=新的JButton(“一个”);
p、 添加(按钮[0]);
按钮[1]=新的JButton(“两个”);
p、 添加(按钮[1]);
按钮[2]=新的按钮(“三个”);
p、 添加(按钮[2]);
按钮[3]=新的按钮(“四个”);
p、 添加(按钮[3]);
按钮[4]=新的按钮(“五个”);
p、 添加(按钮[4]);
按钮[5]=新的按钮(“六个”);
p、 添加(按钮[5]);
按钮[6]=新的按钮(“七”);
p、 添加(按钮[6]);
按钮[7]=新的按钮(“八”);
p、 添加(按钮[8]);
按钮[8]=新的按钮(“九”);
p、 添加(按钮[8]);
加(p);
ActionListener回调=事件->{
字符串标签=event.getActionCommand();
};
对于(int i=0;i这就是问题所在:

buttons[7] = new JButton("Eight");
p.add(buttons[8]);
这似乎是个打字错误,我想应该是的

buttons[7] = new JButton("Eight");
p.add(buttons[7]);

在您的情况下,
按钮[8]
尚未初始化(它将在异常后的行中初始化),因此将导致
NullPointerException

p.add(按钮[8])
您在创建之前添加了一个按钮更重要的是——调试NullPointerException的启发式方法几乎总是一样的:您应该仔细阅读异常的堆栈跟踪,找到出错的代码行、引发异常的代码行,然后仔细检查该行,找出哪个变量为null,以及n追溯您的代码以了解原因。相信我,您会一次又一次地遇到这些问题。将来,请在发布之前搜索该主题,因为这是一个太常见的问题,无法发布另一个NPE问题。谢谢,您是对的。这就是为什么我们在这里-帮助他人-即使有这么简单的问题:)
buttons[7] = new JButton("Eight");
p.add(buttons[7]);