java空指针异常传递对象 [英] java Null Pointer Exception passing object

查看:59
本文介绍了java空指针异常传递对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些创建 Ship 的类(Ship 类扩展了 GameObject)并尝试将其添加到游戏板中.
为此,它告诉 gameFrame 添加对象,如下所示:

I have some class which creates a Ship (class Ship extends GameObject) and attempts to add it to a gameBoard.
To do this, it tells the gameFrame to add the object as follows:

public void startNewGame() {
    Ship myShip = new Ship(GAME_BOARD_WIDTH / 2, GAME_BOARD_HEIGHT-1, SHIP_WIDTH,
            SHIP_HEIGHT);
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            gameFrame = new InvadersGameFrame();
        }
    });
    gameFrame.addGameObject(myShip); //Problem line
    gameFrame.repaint();
}

然后游戏框架调用:

GameBoard gameBoard = new GameBoard();
...
...
public void addGameObject(GameObject ob) {
    gameBoard.addGameObject(ob);
}

依次调用:

public class GameBoard extends JPanel implements GameData{
    private JPanel gameBoard;
    private List<GameObject> objects = new ArrayList<>();

    public GameBoard() {
        gameBoard = new JPanel();
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        setBackground(Color.black);
        g.setColor(Color.RED);
        for(GameObject ob : objects){
            g.drawOval(ob.x, ob.y, ob.width, ob.height);
        }
    }

    //Places object into list for drawing upon next repaint.
    public void addGameObject(GameObject ob) {
        objects.add(ob);
    }
}

现在我的问题是当我 gameFrame.addGameObject(myShip);
棘手的是,当我通过调试器运行时,我根本没有收到 NPE(但我的对象列表似乎仍然是空的).
此外,我可以按照其中的每一个进行操作,但仍然可以看到 myShip,所以我只是引用了我的 GameObject (Ship) 是错误的吗?
我的 addGameObject 参数应该更抽象吗?

Now my problem is that I receive a Null Pointer Exception when I gameFrame.addGameObject(myShip);
The tricky thing is when I run via debugger I do not receive the NPE at all (but my objects list still seems empty).
Also, I can follow into each of these and still see myShip, so am I just referencing my GameObject (Ship) wrong?
Should my parameters for addGameObject somehow be more abstract?

推荐答案

问题是您在 Runnable 内部分配了 gameFrame,直到之后.所以 gameFrame 在您调用 gameFrame.addGameObject(myShip)

The problem is that you are assigning gameFrame inside of the Runnable, which does not get run until later. So gameFrame may be null at the point you call gameFrame.addGameObject(myShip)

这篇关于java空指针异常传递对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆