2013-03-19 57 views
0

我有一个问题,使用数组的对象数组或简单的对象数组,我敢肯定,这与光滑无关。每当init方法运行并到达块部分时,我都会收到一个空指针异常。我也确信问题是我没有正确地声明Block对象。请真的需要一些帮助。有问题声明对象数组的数组Java

import org.newdawn.slick.*; 
import org.newdawn.slick.state.*; 

public class Stages extends BasicGameState { 
    LevelInfo level = new LevelInfo(1); 
    Block block[][]; 
    public Stages(int state) { 

    } 
    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException { 
     level.init(); 
     for(int i = 0; i < 13;i++) { 
      for(int j = 0; j < 13;j++) { 
       block[i][j] = new Block(level.type[i][j]); 
      } 
     } 

    } 
    public void render(GameContainer gc, StateBasedGame sbg,Graphics g) throws SlickException { 
     for(int i = 0; i < 13;i++) { 
      for(int j = 0; j < 13;j++) { 
       g.drawImage(block[i][j].image,j*60,i*60); 
      } 
     } 
    } 
    public void update(GameContainer gc, StateBasedGame sbg,int delta) throws SlickException { 

    } 
    public int getID() { 
     return 2; 
    } 
} 

回答

1

你永远不会实例化2Dblock阵列,导致NPE然后尝试在这里

block[i][j] = new Block(level.type[i][j]); 

变量赋值你可以声明这样你的数组:

private Block block[][] = new Block[13][13]; 
+0

谢谢。你是唯一一个没有低姿态回答我的人。 – 2013-03-20 05:59:10

3

你”不会初始化block本身 - 它的值始终为null。您需要:

block = new Block[13][13]; 

init方法,或在构造函数中,或者在变量声明。

一对夫妇的其他注意事项:

  • 你几乎应该让你的变量private
  • 你或许应该避免硬编码的13号这么频繁...你可以有WIDTH常数也许吧?HEIGHT
  • 这将是更地道声明变量为:

    private Block[][] block; 
    

    这令有关该变量的所有类型的信息一起。在引入Java时,“变量名称后面的数组部分”确实使现有的C/C++程序员感到高兴。