Eclipse建议使用Null Pointerexception,但我相信我初始化了我的对象

正如标题所说,我有NPE错误。 它发生在线:

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

如果我删除它,它会显示它发生在下一行:

 bowl.move(10.0, 0); 

我得出结论,日食没有看到我的“碗”初始化。 为什么? 不是“新GOval”处理的吗? 我在其中一个post中看到一个解决方案是将声明和初始化分成不同的行,但我认为它不太可能是主要的解决方案(此外,它对我的​​情况没有帮助)对此有任何建议码?

此代码应创建一个圆圈,将其放在屏幕的左上角,并在单击鼠标按钮后移动圆圈。 圆圈已成功绘制,但点击后会显示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); 

你是在init方法的类级别遮蔽你的bowl场,

 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 – > compiler – > errors / warnings下有一个专门的部分