我已经看到它发生过几次了,但我似乎找不到任何提及它的地方。在这种情况下,我正在执行网络操作,并且在未解析主机时工作线程终止并且 logcat 显示以下内容:
Warning System.err 8/14/2011 8:41:58 PM 4355 java.net.UnknownHostException: Unable to resolve host "q": No address associated with hostname
Warning System.err 8/14/2011 8:41:58 PM 4355 at java.net.InetAddress.lookupHostByName(InetAddress.java:496)
Warning System.err 8/14/2011 8:41:58 PM 4355 at java.net.InetAddress.getAllByNameImpl(InetAddress.java:277)
Warning System.err 8/14/2011 8:41:58 PM 4355 at java.net.InetAddress.getAllByName(InetAddress.java:249)
Warning System.err 8/14/2011 8:41:58 PM 4355 at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
Warning System.err 8/14/2011 8:41:58 PM 4355 at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
Warning System.err 8/14/2011 8:41:58 PM 4355 at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
Warning System.err 8/14/2011 8:41:58 PM 4355 at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
Warning System.err 8/14/2011 8:41:58 PM 4355 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
Warning System.err 8/14/2011 8:41:58 PM 4355 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
...
Warning dalvikvm 8/14/2011 8:41:58 PM 4355 threadid=10: thread exiting with uncaught exception (group=0x4013a760)
如您所见,异常被写入 System.err 流(这是 Android 实际不使用或不支持的 Java 标准错误)。它没有被任何东西捕获:
- try catch 语句不起作用,因为这是在由 线路尝试预期。
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler())
也不起作用,这看起来非常错误。
所以我的问题是:
- 为什么某些异常在系统 级别上的行为不同于其他异常(也就是绕过
Thread.setDefault
)? - 如何在不求助于阅读 System.err 或其他“hacky”解决方案的情况下仍然获得这些异常?
编辑: Android 3.1、Samsung Tab 10.1,但我很确定这不是设备或操作系统相关的问题。
最佳答案
- 异常来自 commons-http - 它是 android 刚刚使用的独立 apache 项目。它使用自己的线程池,因此您的设置对这些线程没有影响。
- 如果 commons-http 吞下它们并记录到 system.err,你不能
关于java - 线程中的异常被写入 System.err 而不是被捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7058618/