Add defensive code to EventBus to catch unexpected exceptions

This commit is contained in:
catbref 2020-12-10 11:55:06 +00:00
parent 8707f154ee
commit acc616c204

View File

@ -3,9 +3,14 @@ package org.qortal.event;
import java.util.ArrayList;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public enum EventBus {
INSTANCE;
private static final Logger LOGGER = LogManager.getLogger(EventBus.class);
private static final List<Listener> LISTENERS = new ArrayList<>();
public void addListener(Listener newListener) {
@ -50,6 +55,11 @@ public enum EventBus {
}
for (Listener listener : clonedListeners)
listener.listen(event);
try {
listener.listen(event);
} catch (Exception e) {
// We don't want one listener to break other listeners, or caller
LOGGER.warn(() -> String.format("Caught %s from a listener processing %s", e.getClass().getSimpleName(), event.getClass().getSimpleName()), e);
}
}
}