我的代码中的方法之一引发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");
  }
}

我遇到了一个问题,其中if条件永远不会评估为true,因此我无法输出存在某些主机错误的信息。

您可以看到我在打印此代码之前有一个sysout:
Custom Message ; nested exception is:
    java.net.UnknownHostException: abc.xyz

之后,我编写了一个单独的catch块来处理UnknownHostException,但仍然没有被捕获。

最佳答案

好吧,显然您的UnknownHostException包裹在其他一些异常中。换句话说,上面的一些代码捕获了UnknownHostException并抛出:

throw new SomeOtherException("Custom Message", unknownHostEx);

打印e.getClass()以查看包装它的异常类型。您也可以尝试:
if(e.getCause() != null && e.getCause() instanceof UnknownHostException)

但这很丑。

顺便说一句,您应该避免使用instanceof并让catch找出异常本身(但对您的情况无济于事):
catch (java.net.UnknownHostException e) {
      System.out.println("Unknown Host Ex");
}
catch (Exception e) {
      System.out.println("OTHER ERROR");
}

10-08 20:18