【问题标题】:Uncaught java.nio.channels.UnresolvedAddressException未捕获的 java.nio.channels.UnresolvedAddressException
【发布时间】:2014-02-16 13:29:50
【问题描述】:
使用 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(例如),似乎不会捕获异常。我错过了什么?
【问题讨论】:
标签:
java
sockets
exception
nio
【解决方案1】:
UnresolvedAddressException不是IOException 的子类,这就是为什么如果它被抛出你就抓不到它的原因。
UnresolvedAddressException是IllegalArgumentException的子类,如图here,所以试着抓一下:
-
UnresolvedAddressException 本身,因为最好先捕获最具体的异常类型
-
Exception 如果你真的不关心你捕获的异常,你可以随时停止程序或解决这个问题
编辑:您可能错过了该异常,因为编译器没有强制您捕获它。那是因为UnresolvedAddressException 是从RuntimeException 派生的,这种异常类型会在执行期间打动你。来自RuntimeException 的异常不是,例如IOException,必须被捕获,这就是为什么你的编译器可能告诉你将你的代码包装成一个try-首先捕获块。
【解决方案2】:
UnresolvedAddressException 不是 IOException 的子级。
UnresolvedAddressException 扩展了 RuntimeException。
您可以尝试使用 RuntimeException 添加 catch 闭包。