diff --git a/src/main/java/org/hid4java/HidServicesListener.java b/src/main/java/org/hid4java/HidServicesListener.java index abef1dc..4c9872d 100644 --- a/src/main/java/org/hid4java/HidServicesListener.java +++ b/src/main/java/org/hid4java/HidServicesListener.java @@ -66,4 +66,18 @@ public interface HidServicesListener extends EventListener { */ void hidDataReceived(HidServicesEvent event); + /** + * An uncaught exception was thrown + *

+ * Note: Any exceptions that occur in this callback will + * be silently ignored. + * + * @param event The event + * @param cause The uncaught exception + */ + @SuppressWarnings({"unused", "CallToPrintStackTrace"}) + default void hidListenerException(HidServicesEvent event, Throwable cause) { + /* TODO: more robust logging */ + cause.printStackTrace(); + } } \ No newline at end of file diff --git a/src/main/java/org/hid4java/event/HidServicesListenerList.java b/src/main/java/org/hid4java/event/HidServicesListenerList.java index bc8433b..28202c0 100644 --- a/src/main/java/org/hid4java/event/HidServicesListenerList.java +++ b/src/main/java/org/hid4java/event/HidServicesListenerList.java @@ -115,12 +115,15 @@ public void run() { HidServicesEvent event = new HidServicesEvent(hidDevice); for (final HidServicesListener listener : toArray()) { - listener.hidDeviceAttached(event); + try { + listener.hidDeviceAttached(event); + } catch(Throwable cause) { + listener.hidListenerException(event, cause); + } } } }); - } /** @@ -139,7 +142,11 @@ public void run() { HidServicesEvent event = new HidServicesEvent(hidDevice); for (final HidServicesListener listener : toArray()) { - listener.hidDeviceDetached(event); + try { + listener.hidDeviceDetached(event); + } catch(Throwable cause) { + listener.hidListenerException(event, cause); + } } } @@ -163,7 +170,11 @@ public void run() { HidServicesEvent event = new HidServicesEvent(hidDevice); for (final HidServicesListener listener : toArray()) { - listener.hidFailure(event); + try { + listener.hidFailure(event); + } catch(Throwable cause) { + listener.hidListenerException(event, cause); + } } } @@ -188,7 +199,11 @@ public void run() { HidServicesEvent event = new HidServicesEvent(hidDevice, dataReceived); for (final HidServicesListener listener : toArray()) { - listener.hidDataReceived(event); + try { + listener.hidDataReceived(event); + } catch(Throwable cause) { + listener.hidListenerException(event, cause); + } } }