事件管理器未调用(Java)

事件管理器未调用(Java),java,events,methods,reflection,Java,Events,Methods,Reflection,因此,这是我第一次编写一个合适的事件管理器,但是由于某种原因,我的方法调用并调用存储的键/值,抛出了一个NullPointerException,即使我在我的register方法中将类和方法数据添加到映射中 我的呼叫方式: public static final void fire(final Event event) { final Class<? extends Event> clazz = event.getClass(); final List

因此,这是我第一次编写一个合适的事件管理器,但是由于某种原因,我的方法调用并调用存储的键/值,抛出了一个NullPointerException,即使我在我的register方法中将类和方法数据添加到映射中

我的呼叫方式:

public static final void fire(final Event event) {
        final Class<? extends Event> clazz = event.getClass();
        final List<EventListener> listeners = eventMap.get(clazz);
        if(listeners != null) {
            for(EventListener listener : listeners) {
                try {
                    listener.getMethod().invoke(listener.getObject(), event);
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
    }

如果我理解正确的话,您只允许作为参数接受
o.getClass()
并注册它们的方法,就像它们自己处理它们一样。(例如,您注册了类动物,它只处理事件动物)

if(!eventMap.containsKey(clazz)和&m.getParameterTypes()[0].equals(clazz)){
put(clazz,newlinkedlist());
}

(查看第二个条件(注册方法))

没有堆栈跟踪,没有帮助。EventManager的第49行在哪里?for(EventListener:listeners){我想问题一定出在代码的其他地方。你调试过寄存器吗?在调用fire之前确实填充了映射吗?你调试过映射没有被新的替换吗?或者你在调用fire之前注销了一个对象吗?我试图使它只注册具有事件作为其超类的类,但我已经完成了删除了它,但它仍然认为my fire方法中的映射为空。可能是因为您在创建方法时,事件处理程序必须位于实际事件中…
eventMap.put(**clazz**,new LinkedList());
如果需要,请查看我的快速事件总线()
    public static final void register(Object o) {
        Class clazz = o.getClass();
        Method[] methods = clazz.getDeclaredMethods();
        for(Method m : methods) {
            final Handler handler = m.getAnnotation(Handler.class);
            if(handler == null) continue;
            if(!m.isAccessible())
                m.setAccessible(true);
               if(!eventMap.containsKey(clazz) && m.getParameterTypes()[0].equals(clazz)) {
                   eventMap.put(clazz, new LinkedList<EventListener>());
               }
        }
    }

    public static final void unregister(Object o) {
        Class clazz = o.getClass();
        Method[] methods = clazz.getDeclaredMethods();
        for(Method m : methods) {
            if(eventMap.containsKey(clazz)) {
                final List<EventListener> listener = eventMap.get(clazz);
                eventMap.remove(clazz, listener);
            }
        }
if(!eventMap.containsKey(clazz) && m.getParameterTypes()[0].equals(clazz)) {
    eventMap.put(clazz, new LinkedList<EventListener>());
}