在创建新的类对象后获取NPE

时间:2013-12-15 10:57:29

标签: java swing

我正在尝试使用摇摆进行“游戏”,我遇到了一个我无法解决的问题。它可能是容易和明显的东西,但我仍然无法弄清楚。这是我的一段代码:

public class LevelOne {

private static Crate[] crates = new Crate[3];        
public LevelOne(){
    crates[0].setX(200);
    crates[0].setY(200);
    crates[1].setX(280);
    crates[1].setY(40);
    crates[2].setX(440);
    crates[2].setY(40);

}
//more code here
}

我尝试创建LevelOne类的对象以使我的crates变量生效。 (这是一种方法吗?)。

public static void main(String[] args) {
    LevelOne l = new LevelOne();

    JFrame frame = new JFrame("blabla");
    Board board = new Board();
    frame.add(board);
    frame.setSize(805, 830);
    frame.setVisible(true);
    frame.setFocusable(false);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(3);
    frame.setLocation(400, 200);
    board.requestFocus(true);

}

它给我NPE线

LevelOne l = new LevelOne();

正如我所说,这是一小块项目,但我认为这可能解决整个问题。我正在使用这个Crate[]板条箱在我的板上绘制组件,检查碰撞和其他东西。如果没有创建LevelOne类的对象,我在尝试绘制它们时仍会获得NPE。有什么建议,想法,解决方案吗?

2 个答案:

答案 0 :(得分:3)

您忘了在包装箱中初始化元素:

private static Crate[] crates = new Crate[3];        

public LevelOne(){
    crates[0] = new Crate(); // <= add this
    crates[0].setX(200);
    crates[0].setY(200);
    // same for other elements

答案 1 :(得分:1)

您必须将Crate对象传播到crates数组中。您收到NullPointerException,因为crates数组中没有Carte的任何引用。执行以下操作。

private static Crate[] crates = new Crate[3];        
public LevelOne(){
    for(int i = 0; i < crates.length; i++)
        crates[i] = new Crate();
    crates[0].setX(200);
    crates[0].setY(200);
    crates[1].setX(280);
    crates[1].setY(40);
    crates[2].setX(440);
    crates[2].setY(40);

}