7

我的代码中的一种方法引发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条件永远不会评估为真,因此我无法输出存在一些主机错误。

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

Custom Message ; nested exception is: 
    java.net.UnknownHostException: abc.xyz

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

4

2 回答 2

12

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

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

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

if(e.getCause() != null && e.getCause() instanceof UnknownHostException)

但它很丑。

顺便说一句,您应该避免使用instanceofcatch找出异常本身(但对您的情况没有帮助):

catch (java.net.UnknownHostException e) {
      System.out.println("Unknown Host Ex");
}
catch (Exception e) {
      System.out.println("OTHER ERROR");
}
于 2012-11-23T09:18:08.260 回答
2

UnknownHostException嵌套在另一个内部Exception,因此它可能不是它的实例,但它只是包含它。您最终可能会检查e.getCause()

于 2012-11-23T09:18:17.293 回答