Java 为什么我的程序会导致多个空指针异常?
这个程序是一个正在进行的tic tac toe游戏,我只做了按钮;至少在理论上是这样。在发布这篇文章之前,我查阅了“空指针异常”,但仍然不明白它在这里是如何应用的。帮忙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.
//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]);