【发布时间】:2018-12-18 21:41:23
【问题描述】:
我使用的库有时(大约 100 次中的 1 次)会抛出 ConcurrentModificationException 导致应用崩溃。
堆栈跟踪没有提到我的任何代码,而是提到了库的代码。 我试图捕捉我调用库的异常,但它不起作用。
我猜异常是在库中的一个新线程中引发的。
我怎样才能捕捉到这样的异常?
库: 旧的飞利浦 Hue Java 库。 (我很快就要换新的了。)
例外:
E/AndroidRuntime: FATAL EXCEPTION: Thread-21319
Process: my.package, PID: 21561
Theme: themes:{...}
java.util.ConcurrentModificationException
at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
at com.philips.lighting.hue.sdk.notification.impl.PHNotificationManagerImpl$3.onReceived(PHNotificationManagerImpl.java:180)
at com.philips.lighting.hue.sdk.notification.impl.PHHueResultReceiver.execute(PHHueResultReceiver.java:24)
at com.philips.lighting.hue.sdk.notification.impl.PHNotificationManagerImpl.notifyBridgeSearchResult(PHNotificationManagerImpl.java:188)
at com.philips.lighting.hue.sdk.upnp.PHBridgeSearchManagerImpl$1.run(PHBridgeSearchManagerImpl.java:198)
【问题讨论】:
-
您应该添加更多信息,例如堆栈跟踪和您正在使用的库。
-
堆栈跟踪已添加。但是,我只想知道是否可以选择捕获此类异常。
-
我可能错了,但我不这么认为。因为它不是你的线程,所以你不能真正将它包裹在任何
try/catch中。也许你可以做些别的事情,但我不这么认为。我会更多地查看图书馆,看看这是否常见。你碰巧控制线程何时被触发吗?如果是这样,也许你可以防止这种情况发生。 -
您是否有机会将线程安全集合传递给库(请参阅此答案stackoverflow.com/questions/11360401/java-synchronized-list)?正如其他人所说,我不相信您可以处理其他线程中引发的异常。
-
这个库真的很糟糕,我很快就会切换到另一个。我无法控制与线程有关的任何事情。它们是在库中的某处创建的。