java - 线程中的异常被写入 System.err 而不是被捕获

标签 java android exception

我已经看到它发生过几次了,但我似乎找不到任何提及它的地方。在这种情况下,我正在执行网络操作,并且在未解析主机时工作线程终止并且 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 标准错误)。它没有被任何东西捕获:

  1. try catch 语句不起作用,因为这是在由 线路尝试预期。
  2. Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler()) 也不起作用,这看起来非常错误。

所以我的问题是:

  1. 为什么某些异常在系统 级别上的行为不同于其他异常(也就是绕过 Thread.setDefault)?
  2. 如何在不求助于阅读 System.err 或其他“hacky”解决方案的情况下仍然获得这些异常?

编辑: Android 3.1、Samsung Tab 10.1,但我很确定这不是设备或操作系统相关的问题。

最佳答案

  1. 异常来自 commons-http - 它是 android 刚刚使用的独立 apache 项目。它使用自己的线程池,因此您的设置对这些线程没有影响。
  2. 如果 commons-http 吞下它们并记录到 system.err,你不能

关于java - 线程中的异常被写入 System.err 而不是被捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7058618/

相关文章:

javascript - 强大的 Javascript 异常处理

c++ - std::exception_ptr 线程安全吗?

java - 在模拟器上运行但不能在设备上运行的 Android 套接字应用程序

在客户端 PC 上将 java 7 - 25 更新到最新版本 7 - 45 后的 java 客户端应用程序

java - 从 Eclipse 中启动时,Tomcat 找不到服务器监听器类

android - 从 Kotlin Anko 中的两个表中选择数据

c++ - SWIG:将异常从 Python 抛出到 C++

具有多个键的 Java WeakHashMap?

android - Espresso 自定义 ViewMatcher 不匹配描述未出现在日志中

android - ...-v21.xml 有什么用?