【发布时间】:2014-01-10 22:28:06
【问题描述】:
在使用java.nio.channels.Selector 对象时,我不禁注意到工厂创建方法Selector.open() 抛出了一个IOException。
除了处理另一个 IOException 很痛苦之外,我不明白打开选择器可能是一个 I/O 操作,更不用说以某种方式失败并抛出一个 IOException。
要打开的Selector类里面的代码如下:
public static Selector open() throws IOException {
return SelectorProvider.provider().openSelector();
}
注意到它遵循SelectorProvider 对象,我去看了openSelector() 的代码。如下:
public abstract AbstractSelector openSelector()
throws IOException;
看起来类是在运行时动态加载的,这让这些选择器的构造方式更加神秘。
如果“动态加载”失败,负责创建 Selector 的类是 sun.nio.ch.DefaultSelectorProvider,我没有它的源代码,所以我可以跟踪 IOException 的来源。
Java 的关于选择器的 javadoc 根本没有帮助,它们只是声明:
抛出:IOException - 如果发生 I/O 错误
如果有人对 Selector.open() 创建的这个集市 IOException 有任何见解,请告诉我。另外回答一个更实际的问题,应该“正确”处理 IOException(例如消息框、闪光灯、工具包哔声等)还是只是隐藏在日志/空 catch 块中。
【问题讨论】:
标签: java nio ioexception