无缘无故抛出NullPointerException

时间:2014-09-26 19:54:41

标签: java android nullpointerexception

在此代码的第33行抛出NullPointerException

|31|  @Override
|32|  public float[] getVertices() {
|33|    return new float[] {
|34|      center.x - radius, center.y - radius, 0, 1,
|35|      center.x + radius, center.y + radius, 1, 0,
|36|      center.x - radius, center.y + radius, 0, 0,
|37|      center.x - radius, center.y - radius, 0, 1,
|38|      center.x + radius, center.y - radius, 1, 1,
|39|      center.x + radius, center.y + radius, 1, 0
|40|    };
|41|  }

我知道NullPointerExceptions被抛出的原因很多,但我在这一行上看不到任何导致异常的事情。

center.xcenter.yradius都是先前在代码中定义的,因此它们不为空。我做了一个Log.v(TAG, "center.x: " + center.x + ", center.y: " + center.y + ", radius: " + radius),只是为了检查它们是否已定义,结果就是这样:center.x: 0, center.y: 0, radius, 1

这是堆栈跟踪:

java.lang.NullPointerException
        at com.vcapra1.breakoutgame.objects.Ball.getVertices(Ball.java:33)
        at com.vcapra1.breakoutgame.objects.TextureObject.<init>(TextureObject.java:17)
        at com.vcapra1.breakoutgame.objects.Ball.<init>(Ball.java:16)
        at com.vcapra1.breakoutgame.BreakoutRenderer.onSurfaceCreated(BreakoutRenderer.java:66)
        at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1509)
        at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)

1 个答案:

答案 0 :(得分:0)

似乎centerradiusnull。你是使用原始人还是“大人物”?类型?如果使用类,自动装箱也可以为您提供NPE。

当设置时,检查,也许可以在记录之后通过同时发生的其他事件/线程设置。尝试同步这两项操作:重置center / radius并制作数组。