2014-09-26 158 views
0

一个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.x,center.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) 
+2

也许中心为空? – Blackbelt 2014-09-26 19:56:17

+1

请构建一个最小的测试用例。 – 2014-09-26 19:57:21

+1

你在哪里登录? - 在创建'float []'之前尝试记录。 – igr 2014-09-26 19:57:26

回答

0

看来centerradiusnull。你使用原始类型还是“大”类型?如果使用班级,自动​​签名可能会给你NPE。

检查这些变量中的任何一个被设置,也许它可以在日志记录之后,通过在同一时间发生的其他事件/线程来设置。尝试同步这两个操作:重置center/radius并制作数组。

+0

中心是一个对象,半径是原始的float – vcapra1 2014-09-26 20:08:41

+0

你能解释一下'center'可能会改变吗? – igr 2014-09-26 20:09:25

+0

看来,如你所说,该中心正在变为空。但是,center被定义为类顶部的成员变量,并且可以在该函数内部进行访问。如果我在函数的顶部重新定义它,它就会起作用。该变量从来没有访问,所以可以改变这个? – vcapra1 2014-09-26 20:18:26

相关问题