Получение NullPointerException в Java - PullRequest
0 голосов
/ 13 августа 2011

Я написал игру Minesweeper, которая отлично работала на прошлой неделе, но теперь, когда я пытаюсь ее запустить, я получаю исключение NullPointerException, и я не изменил код.

Вероятно, есть одна причина: я установил Ubuntu на свой ноутбук 2 дня назад и попытался скопировать свою папку пользователя из Windows на рабочий стол Ubuntu. Я тупо использовал опцию «переместить сюда», потому что думал, что это скопирует папку (не было никакой опции копирования). Но когда я вернулся в Windows, это было, как будто я был новым пользователем. Поэтому я скопировал эту папку с рабочего стола Ubuntu обратно в Windows, и, к счастью, все мои файлы вернулись.

Вот мой код. В нем говорится, что MinesweeperBoard.show () устарела (этот класс расширяет JFrame), но исключение NullPointerException возникает при board = new MinesweeperBoard(9, 9, 10);, хотя я и объявил board раньше.

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)

Это с тральщика:

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 ]

6 голосов
/ 13 августа 2011

NullPointerException, вероятно, происходит, потому что this.getClass().getClassLoader().getResource("0.gif") возвращает null.

5 голосов
/ 13 августа 2011

Звучит так, как будто файл "0.gif" отсутствует в вашем файле jar (или где-либо еще), поэтому getClass().getClassLoader().getResource("0.gif") возвращает нольЗатем он передается конструктору ImageIcon, который вызывает исключение.

1 голос
/ 13 августа 2011

также возможно, что файлы имеют другие права после того, как вы скопировали файлы с помощью Ubuntu.поэтому вам следует проверить права на файлы и узнать, действительно ли они выходят.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...