正如标题所说,我有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;
}
答案 0 :(得分:5)
该行:
GOval bowl = new GOval(10,10);
声明一个新的GOval并隐藏在底部定义的全局GOval。
该行应该是:
bowl = new GOval(10,10);
答案 1 :(得分:4)
您正在使用bowl
方法在班级隐藏init
字段,
private GOval bowl;
public void init() {
// GOval bowl = new GOval(10,10);
bowl = new GOval(10,10);
add(bowl);
addMouseListeners();
}
答案 2 :(得分:3)
就像大多数人已经提到的那样,你正在影响你的碗变量。
GOval bowl = new GOval(10,10);
应替换为
bowl = new GOval(10,10);
你可以配置eclipse,当你这样做时他会给你一个警告。在首选项中,您在java下有专门的部分 - >编译器 - >错误/警告