java空指针异常传递对象 [英] java Null Pointer Exception passing object
问题描述
我有一些创建 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屋!