0

我的数独应用程序的 gui 类在第 1431 行抛出空异常“线程“AWT-EventQueue-0”java.lang.NullPointerException 中的异常”

    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;

并在主要方法 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);
                }
      }

因此,说明了访问 grid[x][y] 的适当方法。数组中的对象也在 makeGrid() 方法中初始化。为什么空异常错误???

PS第一个if被评论是因为我在那里有同样的例外:-S ... x和y是0-8范围内的坐标并且是click方法的参数,如下所示

private void jLabel28MouseClicked(java.awt.event.MouseEvent evt)   {                                      
    jLabel28.setText(click(3, 0));
}
4

1 回答 1

0

最有可能的sudoku1.grid[x][y]是评估为空。然后,当您在 null 上调用 .setValue(input) 时,您将获得 NPE。

尝试将您的代码更改为.setValue(input)单独一行。从您的示例中,我不清楚sudoku1.grid[x][y]应该评估什么数据类型。

编辑:我想这sudoku1.grid本身可能是空的。我假设这是您的 Sudoku 类的公共成员(您没有向我们提供类定义?)。

底线是你得到 NullPointerException 因为你在一个空对象上调用一个方法。如果您不确定如何在您的环境中使用调试器,另一种解决方法是通过分解该行代码来隔离问题。它做了几件不同的事情,如果你想找到问题,你应该尽量减少它在每一行上一次做一件事。

于 2014-01-27T18:08:53.600 回答