未捕获的java.nio.channels.UnresolvedAddressException

时间:2014-02-16 13:29:50

标签: java sockets exception nio

使用Java 1.7,以下代码

try
{
  sck = SocketChannel.open();
  sck.configureBlocking(false);

  sck.connect(new java.net.InetSocketAddress(**<bad remote ip address>**, remote_port));
  sel = Selector.open();

  ...
}
catch (IOException e)
{
  return false;
}
如果远程地址是坏DNS(例如),

似乎没有捕获异常。我错过了什么?

2 个答案:

答案 0 :(得分:5)

UnresolvedAddressException 不是 IOException的子类,这就是为什么如果抛出它就不会捕获它的原因。

UnresolvedAddressExceptionIllegalArgumentException的子类,如here所示,请尝试捕捉:

  • UnresolvedAddressException本身,因为首先捕获最具体的异常类型总是更好的做法
  • Exception如果你真的不关心你捕获的异常,因为你总是可以暂停程序或解决这个问题

编辑:您可能错过了该异常,因为编译器没有强制您抓住它。这是因为UnresolvedAddressException派生自RuntimeException,这是在执行期间在头部中击中你的异常类型。从RuntimeException派生的例外,例如IOException必须被捕获,这就是您的编译器可能会告诉您包装代码的原因首先进入try-catch块。

答案 1 :(得分:1)

UnresolvedAddressException不是IOException的子节点。 UnresolvedAddressException扩展RuntimeException。 您可以尝试使用RuntimeException添加catch闭包。