jopi
Попрошайка
- 1,421
- 30
- 260
короче опять проблема, есть метод, выглядит так
находится он в классе claz.class, объект этого класса я регистрирую в обработчике событий, потом отправляю объект события test рефлексией
кое как через какие-то костыли проверку проходит и на invoke он крашится мол аргумент не тот
что может не так быть?
P.s. сначала делаю register, он появляется в listeners, и потом крашит на invoke.
Ошибка:
Java:
@EventHandler
public void on(test event) {
System.out.println("rabotaet");
}
кое как через какие-то костыли проверку проходит и на invoke он крашится мол аргумент не тот
что может не так быть?
EventBus:
public class EventBus {
static List<Object> listeners = new ArrayList<Object>();
public boolean register(Object obj) {
if (!this.listeners.contains(obj)) {
this.listeners.add(obj);
return true;
}
return false;
}
public boolean unregister(Object obj) {
if (this.listeners.contains(obj)) {
return this.listeners.remove(obj);
}
return false;
}
//TODO: CHANGE PARAMETERTYPE EQUALS FUNCTION
public void post(test event) {
for (Object listener : this.listeners) {
for (Method m : listener.getClass().getMethods()) {
if (ReflectUtils.methodAnnotatedBy(m, EventHandler.class)) {
if (m.getParameterTypes().length == 1) {
if (event.getClass().getName().equals(m.getParameterTypes()[0].getName())) { //replace that fucking shit
try {
m.invoke(listener, event); //EventBus.java:37
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
CrueModLoader.err("Method annotated with @EventHandler must have only one parameter <? extends Event>");
}
}
}
}
}
}
Ошибка:
Код:
java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at by.fxg.crue.event.EventBus.post(EventBus.java:37)