From fc9f8fcfccd0042fb20b0764aa10678335c98f3f Mon Sep 17 00:00:00 2001 From: Trent Summerlin Date: Fri, 20 Jun 2025 19:29:24 -0500 Subject: [PATCH] Add hidListenerException() callback to HidServicesListener --- .../org/hid4java/HidServicesListener.java | 14 +++++++++++ .../event/HidServicesListenerList.java | 25 +++++++++++++++---- 2 files changed, 34 insertions(+), 5 deletions(-) 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); + } } }