我有一个小问题:我为我的游戏开发了一个名为"ExampleQuest"的类,它扩展了抽象类Quest。我这样做是为了创建个别任务类。现在,我的ExampleQuest类应该计算我的实体死亡次数,所以我实现了我的EntityListener。现在,我必须在我的Playstate类中注册它,以使一切正常工作,但这里是我的实际问题:方法Playstate.addEntityListener(this)给了我一个nullpointer异常。我发现这个错误是由于任何扩展类引起的。如果ExampleQuest不扩展Quest,则一切正常工作。我的Quest类没有任何错误,因为如果我用其他东西扩展ExampleQuest,我也会得到nullpointer异常。
---> 所以我的解释是,Playstate.addEntityListener(this)中的this指的是在这种情况下扩展类Quest,而不是EntityListener。我如何解决我的问题?
---> 所以我的解释是,Playstate.addEntityListener(this)中的this指的是在这种情况下扩展类Quest,而不是EntityListener。我如何解决我的问题?
public class ExampleQuest extends Quest implements EntityListener {
public ExampleQuest() {
super();
Playstate.addEntityListener(this); //gives me nullointer exception
}
//implemented method
public void entityDeathEvent(EntityEvent e) {
}
}
This is a part of my Playstate class:
public class Playstate {
public static Set<EntityListener> entityListener;
public Playstate() {
entityListener = new HashSet<EntityListener>();
}
public static void addEntityListener(EntityListener listener) {
entityListener.add(listener);
}
}
编辑:这个功能正常运作:
public class EventHandler implements EntityListener {
public EventHandler() {
Playstate.addEntityListener(this);
}
}
它之所以有效,是因为EventHandler仅实现了一个类。
Qwest
类。至少包括字段和构造函数。 - Sean BrightPlaystate
实例,因此静态字段尚未从未调用的Playstate构造函数中分配。使用静态是可疑的,但可以通过在声明中赋值(例如public static Set<EntityListener> entityListener = new HashSet<EntityListener>();
)或静态初始化块(然后从Playstate构造函数中删除赋值)来“修复”。 - user2864740