Skip to content

Commit df7b6a2

Browse files
committed
Fixed the issue that removeHandler would cause all Handlers of the same Class to not receive events;
1 parent 80d4dba commit df7b6a2

File tree

3 files changed

+9
-5
lines changed

3 files changed

+9
-5
lines changed

src/main/java/net/lamgc/utils/event/EventExecutor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,9 @@ public void addHandler(EventHandler handler) throws IllegalAccessException {
8484
* @param handler 要删除的EventHandler对象
8585
*/
8686
public void removeHandler(EventHandler handler){
87-
eventHandlerObjectMap.removeHandlerObject(handler);
88-
eventHandlerList.removeEventHandler(handler);
87+
if(!eventHandlerObjectMap.removeHandlerObject(handler)){
88+
eventHandlerList.removeEventHandler(handler);
89+
}
8990
}
9091

9192
/**

src/main/java/net/lamgc/utils/event/EventHandlerObjectMap.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ public interface EventHandlerObjectMap {
2424
/**
2525
* 删除指定的{@link EventHandler}
2626
* @param handler 要删除的Handler
27+
* @return 如果删除后该EventHandler已空则返回false
2728
*/
28-
void removeHandlerObject(EventHandler handler);
29+
boolean removeHandlerObject(EventHandler handler);
2930

3031
}

src/main/java/net/lamgc/utils/event/HashHandlerObjectMap.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ public Set<EventHandler> getHandlerObject(Class<?> eventHandlerClass) {
2222
}
2323

2424
@Override
25-
public void removeHandlerObject(EventHandler handler) {
26-
handlerMap.remove(handler.getClass());
25+
public boolean removeHandlerObject(EventHandler handler) {
26+
HashSet<EventHandler> eventHandlers = handlerMap.get(handler.getClass());
27+
eventHandlers.remove(handler);
28+
return !eventHandlers.isEmpty();
2729
}
2830
}

0 commit comments

Comments
 (0)