Java 尝试将InputEvent推入ArrayQue时出现NullPointerException

Java 尝试将InputEvent推入ArrayQue时出现NullPointerException,java,io,nullpointerexception,Java,Io,Nullpointerexception,我对Java相当陌生,对严格的C类语言非常生疏,所以我似乎不能完全理解这个问题: import java.awt.event.InputEvent; import java.util.ArrayDeque; class DataBase { private ArrayDeque<InputEvent> inputEvents; private static final DataBase instance = new DataBase(); private

我对Java相当陌生,对严格的C类语言非常生疏,所以我似乎不能完全理解这个问题:

import java.awt.event.InputEvent;
import java.util.ArrayDeque;

class DataBase
{
    private ArrayDeque<InputEvent> inputEvents;
    private static final DataBase instance = new DataBase();

    private DataBase() {}

    public InputEvent pollEventStack()
    {
        return inputEvents.poll();
    }

    public boolean pushToEventStack(InputEvent event)
    {
        boolean result = false;
        try {
            result = inputEvents.add(event);
        } catch (NullPointerException e) {
            Debug.log(event.paramString()); // We end up here with valid data in the log. Event is not as null as it claims to be, huh?

            System.exit(0);
        }
        return result;
    }

    public static DataBase getInstance()
    {
        return instance;
    }
}
我确信我遗漏了一些可笑的简单的东西,不幸的是搜索并没有产生建设性的结果


附言:作为旁注,为我的所有实体提供一个全局ish单例存储箱是一个好主意吗?InputEvents可能在它们自己的类中是最好的,但从长远来看,它应该存储gfx资源、敌人、物品等。或者应该是吗?

事件
确实不是空的,
输入事件
是,它还没有初始化。您可以在字段规范(
private ArrayDequeue inputEvents=new ArrayDequeue();
)或构造函数中初始化它。

。。。我就知道这么简单。现在感觉自己像个傻瓜。谢谢你的及时答复。(只能在7分钟内接受答案)没关系,这就是StackOverflow的目的,对吗?如果这回答了你的问题,你可以接受:)是的,当然接受了。很抱歉耽搁了,所以请限制。顺便问一下,你对脚注问题有什么看法?不能单独问。:)根据OO设计,我认为为所有对象设置一个单独的存储箱不是一个好主意。创建一个好的对象模型,并将所有实例存储在其中。不过,您可以为某些特定类型创建一些单例查找注册表(EnemiesRegistry?)?不确定它是否比中央目录更好(我来自php+mysql背景,这是受mysql启发的)。一些实体需要由多个管理器类访问:图形、声音、物理、AI等。因此,它要么是几个单例,要么是一个中心。除非我想要一个参数链的噩梦……顺便问一下,你是想使用ArrayQue,还是想要一个简单的ArraList?@drvdijk考虑到这是一个用于按键和鼠标事件的简单动作堆栈,我所需要的只是推送和弹出功能。我不确定ArrayDeque是否是正确的方式。正如我所说,Java对我来说是新事物。@drvdijk哦,是的,可能还需要可变大小。不能用巨大的缓冲区占用整个内存,或者对存储事件的限制太低。德克似乎已经足够了。我有什么不足之处吗?戴克也许很合适。我只是问了一下,因为这并不是Java新手开始使用的第一种集合类型。这真的取决于你想用它做什么:)
KEY_PRESSED,keyCode=27,keyText=Escape,keyChar=Escape,keyLocation=KEY_LOCATION_STANDARD,rawCode=27,primaryLevelUnicode=27,scancode=1,extendedKeyCode=0x1b