在此代码的第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.x
,center.y
和radius
都是先前在代码中定义的,因此它们不为空。我做了一个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)
答案 0 :(得分:0)
似乎center
或radius
是null
。你是使用原始人还是“大人物”?类型?如果使用类,自动装箱也可以为您提供NPE。
当设置时,检查,也许可以在记录之后通过同时发生的其他事件/线程设置。尝试同步这两项操作:重置center
/ radius
并制作数组。