【发布时间】:2015-08-21 15:09:36
【问题描述】:
我目前正在为我的计算机科学课编写 Snake 游戏。然而,我遇到了很多困难(因为我是我所在街区唯一一个独自工作的人),我不得不重新开始。
现在我只是想从我创建的第二个类(Segment)中创建一个对象数组(名为 Snake)。
我在第 26 行收到 NullPointerException:g.fillRect(xValue, yValue, size, size); 我应该在哪里获得 Graphics 的实例来调用此方法?
import java.awt.*;
import java.applet.*;
public class Segment extends Applet
{
private Graphics g;
private int xValue;
private int yValue;
private int size;
public Segment () {}
public Segment(int x, int y)
{
xValue = x;
yValue = y;
size = 10;
drawSegment(g);
}
public void drawSegment(Graphics g)
{
g.fillRect(xValue, yValue, size, size);
}
}
import java.awt.*;
import java.applet.*;
public class SnakeGame extends Applet
{
private Segment[] snake;
private Graphics g;
private int length;
private int sxValue;
private int syValue;
public SnakeGame()
{
length = 6;
snake = new Segment[length];
sxValue = 100;
syValue = 100;
for (int c = 0; c < snake.length; c++)
{
snake[c] = new Segment(sxValue, syValue);
sxValue = sxValue + 10;
}
drawSnake(g);
}
public void drawSnake(Graphics g)
{
for(int counter = 0; counter < length; counter++)
{
snake[counter].drawSegment(g);
}
}
}
但是,我不断收到诸如
之类的错误java.lang.NullPointerException
at Segment.drawSegment(Segment.java:26)
at Segment.<init>(Segment.java:21)
at SnakeGame.<init>(SnakeGame.java:22)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at java.lang.Class.newInstance(Class.java:433)
at sun.applet.AppletPanel.createApplet(AppletPanel.java:799)
at sun.applet.AppletPanel.runLoader(AppletPanel.java:728)
at sun.applet.AppletPanel.run(AppletPanel.java:378)
at java.lang.Thread.run(Thread.java:745)
【问题讨论】:
-
请在您的
Segment.java文件中标识第26 行。 -
@PM77-1 这个参考确实有帮助,但不能解决问题。识别出
null对象,但不清楚如何获取实例。 -
@NickVolynkin :我曾经有过这样的concern。显然,整个社区不想为每个特定案例提供答案。
-
@PM77-1 在这种情况下,明确地问“为什么
a有空值?”可能会很好,明确指向产生异常的字符串和变量。 OP 没有在这个问题中完成这项工作,因此您的标志是合适的。