在Java中获取NullPointerException

时间:2011-08-13 14:37:11

标签: java nullpointerexception

我写了一个上周工作正常的Minesweeper游戏,但现在当我尝试运行它时,我得到一个NullPointerException,并且我没有更改代码。

有一件事可能是原因:我在2天前在笔记本电脑上安装了Ubuntu,我试图将我的用户文件夹从Windows复制到我的Ubuntu桌面。我愚蠢地使用“移动到这里”选项,因为我认为这将复制文件夹(没有任何复制选项)。但是当我重新登录Windows时,就好像我是一个新用户。所以我将该文件夹从我的Ubuntu桌面复制回Windows,幸运的是我的所有文件都回来了。

这是我的代码。它确实说不推荐使用MinesweeperBoard.show()(该类扩展了JFrame),但是在board = new MinesweeperBoard(9, 9, 10);发生NullPointerException,即使我之前已经声明了。

public static void main(String[] args)
{
    Scanner in = new Scanner(System.in);
    System.out.println("Do you want to play beginner (b), intermediate (i), or EXPERT (e)?");
    String input = in.next();
    MinesweeperBoard board;

    if (input.equals("b"))
        board = new MinesweeperBoard(9, 9, 10);
    else if (input.equals("i"))
        board = new MinesweeperBoard(16, 16, 40);
    else if (input.equals("e"))
        board = new MinesweeperBoard(30, 16, 99);
    else
        board = new MinesweeperBoard(30, 30, 100);

    board.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    board.show();
}

在堆栈跟踪中,它指向另一个类中的这行代码: icons[0] = new ImageIcon(this.getClass().getClassLoader().getResource("0.gif"));

之后的堆栈跟踪线是at javax.swing.ImageIcon.<init>(Unknown Source)

我尝试构建所有并清理,但这样做并没有解决任何问题。

被修改 整个堆栈跟踪:

Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at MBox.<init>(MBox.java:25)
at MinesweeperBoard.<init>(MinesweeperBoard.java:50)
at MinesweeperGame.main(MinesweeperGame.java:16)

这是来自MinesweeperBoard:

for (int i = 0; i < numRows; i++)
    {
        for (int j = 0; j < numCols; j++)
        {
            boxes[i][j] = new MBox(i, j); //Line 50
            boxes[i][j].setBounds(i * SIZE + 5, j * SIZE + 65, SIZE, SIZE);
            boxes[i][j].putSelfInBoard(this);
            cont.add(boxes[i][j]);
        }
    }

这是来自MBox:

    icons = new ImageIcon[12];
    icons[0] = new ImageIcon(this.getClass().getClassLoader().getResource("0.gif")); //Line 25
    icons[1] = new ImageIcon(this.getClass().getClassLoader().getResource("1.gif"));
    icons[2] = new ImageIcon(this.getClass().getClassLoader().getResource("2.gif"));
    ...

3 个答案:

答案 0 :(得分:6)

NullPointerException可能正在发生,因为this.getClass().getClassLoader().getResource("0.gif")正在返回null

答案 1 :(得分:5)

听起来文件“0.gif”不在您的jar文件中(或任何地方),因此getClass().getClassLoader().getResource("0.gif")返回null。然后将其传递给ImageIcon构造函数,该构造函数抛出异常。

答案 2 :(得分:1)

使用ubuntu复制文件后,文件还可能具有其他权限。 所以你应该检查文件的权限,然后确实退出。