Как говорится в названии, у меня ошибка 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;
}
Линия:
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 → компиляторе → ошибки/предупреждения