使用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(例如),似乎没有捕获异常。我错过了什么?
答案 0 :(得分:5)
UnresolvedAddressException
不是 IOException
的子类,这就是为什么如果抛出它就不会捕获它的原因。
UnresolvedAddressException
是IllegalArgumentException
的子类,如here所示,请尝试捕捉:
UnresolvedAddressException
本身,因为首先捕获最具体的异常类型总是更好的做法Exception
如果你真的不关心你捕获的异常,因为你总是可以暂停程序或解决这个问题 编辑:您可能错过了该异常,因为编译器没有强制您抓住它。这是因为UnresolvedAddressException
派生自RuntimeException
,这是在执行期间在头部中击中你的异常类型。从RuntimeException
派生的不例外,例如IOException
,必须被捕获,这就是您的编译器可能会告诉您包装代码的原因首先进入try-catch块。
答案 1 :(得分:1)
UnresolvedAddressException不是IOException的子节点。 UnresolvedAddressException扩展RuntimeException。 您可以尝试使用RuntimeException添加catch闭包。