Eclipse предлагает исключение Null Pointer, хотя я считаю, что инициализировал свой объект

1

Как говорится в названии, у меня ошибка NPE. Это происходит в режиме онлайн:

while (getWidth() > bowl.getX()+10) {

Если я удалю его, он показывает, что это происходит на следующей строке:

bowl.move(10.0, 0);

Я пришел к выводу, что затмение не отображает мою "миску". Зачем? С этим не справляется "новый ГОВАЛ"? Я видел в одном из потоков здесь, что решение состояло в том, чтобы разделить объявление и инициализацию на разные строки, но я думаю, что это вряд ли будет основным решением (кроме того, это не помогло в моем случае). Любые предложения по этому вопросу код?

Этот код должен создавать круг, помещать его в левый верхний угол экрана и перемещать круг после нажатия кнопки мыши. Круг рисуется успешно, но сообщение NPE появляется после нажатия.

import acm.program.*;
import acm.graphics.*;
import java.awt.event.*;

public class animation extends GraphicsProgram {

public void init() {
    GOval bowl = new GOval(10,10);
    add(bowl);
    addMouseListeners();
}


public void mouseClicked(MouseEvent e) {
        while (getWidth() > bowl.getX()+10) {
        bowl.move(10.0, 0);
        pause(50);
    }
}

private GOval bowl; 
}
  • 1
    да =) Опять же, никогда не хотел обидеть затмение. Вероятно, название должно быть. Я все еще верю, что инициализировал объект, хотя Eclipse говорит, что у меня ошибка;)
Теги:
nullpointerexception

3 ответа

5
Лучший ответ

Линия:

GOval bowl = new GOval(10,10);

объявляет новый GOval и скрывает глобальный GOval, определенный внизу.

Эта строка должна быть следующей:

bowl = new GOval(10,10);
  • 0
    @ Эндрю Стаббс Вау. Я так долго боролся с этим! Спасибо! Это помогло!
  • 0
    @ rcook, я никогда не говорил, что затмение было не так. Это было бы слишком высокомерно. Я только сказал, что считаю, что инициализировал объект.
Показать ещё 1 комментарий
4

Вы затеняете свое поле bowl на уровне класса в методе init,

private GOval bowl; 

public void init() {
  // GOval bowl = new GOval(10,10);
  bowl = new GOval(10,10);
  add(bowl);
  addMouseListeners();
}
3

Как и большинство упомянутых людей, вы затеняете свою переменную чаши.

GOval bowl = new GOval(10,10);

следует заменить на

bowl = new GOval(10,10);

Вы можете настроить eclipse, чтобы он дал вам предупреждение, когда вы это делаете. В настройках у вас есть выделенная часть для этого в java → компиляторе → ошибки/предупреждения

Ещё вопросы

Сообщество Overcoder
Наверх
Меню