catch块中无法识别UnknownHostException

Abu*_*kar 5 java exception-handling exception

我的代码中的一个方法抛出UnknownHostException异常

我第一次有这样一个catch块:

catch (Exception e) {
  // TODO Auto-generated catch block
  System.out.println("Custom Message "+e.getMessage());
  if(e instanceof java.net.UnknownHostException){
      System.out.println("Unknown Host Ex");
  }else{
      System.out.println("OTHER ERROR");
  }
}
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,该if条件永远不会评估为真,因此我无法输出有一些主机错误.

你可以看到我sysout之前有一个打印这个:

Custom Message ; nested exception is: 
    java.net.UnknownHostException: abc.xyz
Run Code Online (Sandbox Code Playgroud)

在那之后我写了一个单独的catch块来处理,UnknownHostException但仍然没有被抓住.

Tom*_*icz 9

好吧,显然你UnknownHostException的包裹在其他一些例外.换句话说,上面的一些代码捕获UnknownHostException和抛出:

throw new SomeOtherException("Custom Message", unknownHostEx);
Run Code Online (Sandbox Code Playgroud)

打印e.getClass()以查看包装它的异常类型.你也可以尝试:

if(e.getCause() != null && e.getCause() instanceof UnknownHostException)
Run Code Online (Sandbox Code Playgroud)

但它很难看.

顺便说一下,你应该避免使用instanceof并让catch自己找出异常(但在你的情况下它没有帮助):

catch (java.net.UnknownHostException e) {
      System.out.println("Unknown Host Ex");
}
catch (Exception e) {
      System.out.println("OTHER ERROR");
}
Run Code Online (Sandbox Code Playgroud)