自定义mousevent方法的NullPointerException

时间:2014-01-27 17:57:58

标签: java nullpointerexception actionevent

我的数独应用程序的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));
}

1 个答案:

答案 0 :(得分:0)

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

尝试更改代码,使其自己拥有.setValue(input)。我不清楚你的例子究竟是什么数据类型sudoku1.grid[x][y]应该评估。

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

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