让我们进入它,我有一个充满getter和setter的'handler'类,它包含添加和删除对象的代码,它看起来像这样:
public void addObject(GameObject object){
this.object.add(object);
}
public void removeObject(GameObject object){
this.object.remove(object);
请注意,'GameObject'是一个类,所有对象都扩展了该类 然后我在这里创建一个对象,
if(mouseOver(mx, my, 840/2-100, 149, 200, 64)){
game.gameState = STATE.Game;
handler.addObject(new Player(0, 300, ID.Player,game.playerImg, game));
handler.addObject(new BasicEnemy(700, 300, ID.BasicEnemy, game.enemyImg, game));
handler.addObject(new F1Jutsu(400, 300, ID.F1Jutsu, game.f1jutsuImg, game));
}
参数内的东西是我想要添加的对象的参数。每个对象当然都是它自己的类。现在我想删除对象F1Jutsu,如果它的x值在游戏之外,并且该对象每秒向右移动(这样可行,所以我不会在这里粘贴它,如果被要求会这样做)
if(x > 800){
handler.removeObject(this);
}
我有一个'tick'函数(在F1Jutsu类中),就像一个run函数。问题是,一旦调用了removeObject方法,我就会得到一个nullpointer异常,出现以下错误:
Exception in thread "Thread-2" java.lang.NullPointerException
at com.ninja.main.F1Jutsu.tick(F1Jutsu.java:24)
at com.ninja.main.Handler.tick(Handler.java:14)
at com.ninja.main.Game.tick(Game.java:110)
at com.ninja.main.Game.run(Game.java:87)
at java.lang.Thread.run(Unknown Source)
基本上,在F1Jutsu类中有一个NullPointerException(我正在移除null ??但它是一个对象),它被告知要删除对象,然后是调用remove对象方法的每个地方以及调用的所有地方调用删除对象等的地方会导致错误。
我认为这个想法可能是对象的x值现在为null,这是nullpointer(?)但不确定,如果是,我将如何解决这个问题?我很抱歉长篇(土豆?)左编辑:
if(x > 800){
handler.removeObject(this);
}
MRK我不确定你的意思,我包括我添加对象的部分以及我在上面的代码中删除的位置。
编辑:
好的,经过大量的工作,我得出结论,当我添加对象时,它被添加为空图像。我必须问我如何在不改变代码基础(参数)的情况下将其设置为某种东西(不为空)
答案 0 :(得分:1)
你不应该在你删除的对象中的代码块中间调用remove方法;即使它被删除,它也会尝试完成代码,但会失败,因为它的所有变量都是null
。要解决此错误,建议您在boolean
课程中添加名为removed
的{{1}}。只需将GameObject
设置为handler.removeObject(this)
,而不是调用removed
。然后,您需要在true
方法的Handler
类中添加几行代码,以检查并删除tick()
值为removed
的所有对象。像这样的东西
true