为什么我得到一个InvocationTargetException? Android 2D游戏

我用Android编写了一个用Cocos2D编写的2D游戏。 这是我的主要东西的代码:

public void gameLoop(float dt) { //Player Gravity if(canExecuteMovement(0, 6)) { guy.moveY(6); } //Player Movement if(direction == 1) { if(canExecuteMovement(-3, 0)) guy.moveX(-3); } else if(direction == 2) { if(canExecuteMovement(3, 0)) guy.moveX(3); } } private boolean canExecuteMovement(int xChange, int yChange) { int projectedX = guy.getBounds().left + xChange; int projectedY = guy.getBounds().top + yChange; Log.i("DD", "guy:" + guy.getBounds().toString()); Rect projectedBounds = new Rect(projectedX, projectedY, projectedX + guy.getWidth(), projectedY + guy.getHeight()); Log.i("DD", "guy:" + projectedBounds.toString()); for (int i = 0; i < platformCount; i++) { if (Rect.intersects(projectedBounds, platform[i].getBounds())) { return false; } } return true; } 

正如你所看到的,这个函数看起来很好,canExecuteMovement中的矩形也很好,但是在这一行中:

 LINE 107: if (Rect.intersects(projectedBounds, platform[i].getBounds())) { 

我得到一个InvocationTargetException。 这里是logcat:

 01-21 23:10:12.601: W/System.err(13118): java.lang.reflect.InvocationTargetException 01-21 23:10:12.601: W/System.err(13118): at java.lang.reflect.Method.invokeNative(Native Method) 01-21 23:10:12.605: W/System.err(13118): at java.lang.reflect.Method.invoke(Method.java:511) 01-21 23:10:12.605: W/System.err(13118): at org.cocos2d.actions.CCTimer.update(CCTimer.java:82) 01-21 23:10:12.605: W/System.err(13118): at org.cocos2d.actions.CCScheduler.tick(CCScheduler.java:253) 01-21 23:10:12.605: W/System.err(13118): at org.cocos2d.nodes.CCDirector.drawCCScene(CCDirector.java:679) 01-21 23:10:12.605: W/System.err(13118): at org.cocos2d.nodes.CCDirector.onDrawFrame(CCDirector.java:649) 01-21 23:10:12.605: W/System.err(13118): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1462) 01-21 23:10:12.605: W/System.err(13118): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216) 01-21 23:10:12.605: W/System.err(13118): Caused by: java.lang.NullPointerException 01-21 23:10:12.608: W/System.err(13118): at com.qasim.platformer.GameLayer.canExecuteMovement(GameLayer.java:107) 01-21 23:10:12.608: W/System.err(13118): at com.qasim.platformer.GameLayer.gameLoop(GameLayer.java:86) 01-21 23:10:12.608: W/System.err(13118): ... 8 more 01-21 23:10:12.620: D/dalvikvm(13118): GC_CONCURRENT freed 460K, 6% free 9279K/9863K, paused 2ms+3ms 01-21 23:10:12.624: I/DD(13118): guy:Rect(252, 63 - 300, 111) 

可能是什么问题呢? 在家伙的getBounds()类是这样的:

 public Rect getBounds() { return new Rect(x, y, x+width, y+height); } 

    InvocationTargetException仅仅是一个在dynamic调用中引发的exception的包装。 真正的问题是它包装的NullPointerException

     Caused by: java.lang.NullPointerException at com.qasim.platformer.GameLayer.canExecuteMovement(GameLayer.java:107) at com.qasim.platformer.GameLayer.gameLoop(GameLayer.java:86) 

    正如你所指出的那样,这是违规的路线:

     if (Rect.intersects(projectedBounds, platform[i].getBounds())) { 

    这个行上唯一可能发生空指针的地方是platform[i].getBounds()platform本身是null ,或者platform[i]的元素是。