我的数独应用程序的gui类抛出一个空异常“线程中的异常”AWT-EventQueue-0“java.lang.NullPointerException”第1431行
private String click(int x, int y) {
String dialog = null;
if (5==5/*sudoku1.grid[x][y].isEditable()==true*/) {
dialog = JOptionPane.showInputDialog("Enter Input:");
int input = Integer.parseInt(dialog);
1431: sudoku1.grid[x][y].setValue(input);
}
else {
//JOptionPane.showMessageDialog(...);
}
return dialog;
}
在类对象的开头声明了sudoku1:
public class ClassicGUI extends javax.swing.JFrame {
private boolean finished;
Sudoku sudoku1;
private final int size = 9;
并在main方法run()中创建:
public void run() {
new ClassicGUI().setVisible(true);
System.out.println("Testing GUI...");
sudoku1 = new Sudoku(size);
sudoku1.makeGrid(size);
}
grid对象是Cell:
类型的二维数组 public void makeGrid(int size) {
this.lines=size;
grid = new Cell[lines][lines];
for(int i=0;i<size;i++)
for(int j=0;j<size;j++) {
grid[i][j] = new Cell();
grid[i][j].setValue(0);
}
}
说明了访问网格[x] [y]的适当方法。此外,数组中的对象在makeGrid()方法中初始化。为什么Null异常错误???
P.S。第一个if被评论,因为我在那里有相同的例外:-S ... x和y是范围从0到8的坐标,是click方法的参数,如下所示
private void jLabel28MouseClicked(java.awt.event.MouseEvent evt) {
jLabel28.setText(click(3, 0));
}
答案 0 :(得分:0)
最有可能的是,sudoku1.grid[x][y]
正在评估为null。然后当您在null上调用.setValue(input)时,您将获得NPE。
尝试更改代码,使其自己拥有.setValue(input)
。我不清楚你的例子究竟是什么数据类型sudoku1.grid[x][y]
应该评估。
编辑:我认为sudoku1.grid
本身可能为空。我假设这是你的Sudoku类的公共成员(你没有向我们提供类定义?)。
底线是你得到NullPointerException,因为你在一个null的对象上调用一个方法。如果您不确定如何在您的环境中使用调试器,另一种解决方法是通过分解该行代码来隔离问题。它做了一些不同的事情,如果你想找到问题,你应该尝试将它减少到每行一次做一件事。