Eclipse предлагает исключение Null Pointer, хотя я считаю, что инициализировал свой объект
Как видно из названия, у меня ошибка NPE. Это происходит онлайн:
while (getWidth() > bowl.getX()+10) {
Если я удаляю это, это показывает, что это происходит в следующей строке:
bowl.move(10.0, 0);
Я пришел к выводу, что затмение не видит мою "чашу" инициализирован. Зачем? Разве "новый GOval" не справляется с этим? Я видел в одном из потоков здесь, что решение было разделить объявление и инициализацию на разные строки, но я думаю, что это вряд ли будет основным решением (кроме того, это не помогло в моем случае). Любые предложения на этот счет код?
Этот код должен создать круг, поместить его в левый верхний угол экрана и переместить круг после нажатия кнопки мыши. Круг нарисован успешно, но после щелчка появляется сообщение 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;
}
3 ответа
Линия:
GOval bowl = new GOval(10,10);
объявляет новый GOval и скрывает глобальный GOval, определенный внизу.
Эта строка должна быть просто:
bowl = new GOval(10,10);
Вы следите за своим bowl
поле на уровне класса в init
метод,
private GOval bowl;
public void init() {
// GOval bowl = new GOval(10,10);
bowl = new GOval(10,10);
add(bowl);
addMouseListeners();
}
Как и большинство людей, которые уже упоминали, вы отслеживаете переменную чаши.
GOval bowl = new GOval(10,10);
следует заменить на
bowl = new GOval(10,10);
Вы можете настроить Eclipse, чтобы он предупреждал вас, когда вы делаете это. В настройках у вас есть отдельная часть для этого в Java -> компилятор -> ошибки / предупреждения