雖然使用java.nio.channels.Selector
對象,但我不禁注意到工廠創建方法Selector.open()
拋出IOException。Java NIO 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;
貌似類被在運行時這使甚至更神祕這些選擇器是如何被構造動態加載。
如果「動態加載」失敗,則負責創建選擇器的類是sun.nio.ch.DefaultSelectorProvider
,我沒有它的源代碼,所以即使我能跟蹤IOException的來源。
Java的關於選擇器的javadoc不會在所有幫助他們只是狀態:
拋出:IOException - 如果發生I/O錯誤
如果任何人有關於創造了這個集市IOException異常任何見解通過Selector.open()請讓我知道。另外回答一個更實際的問題,如果IOException被「正確」處理(例如messagebox,閃爍的燈光,工具包的嗶聲等)或者只是隱藏在日誌/空的catch塊中。
感謝您的信息。如果隨意將任意異常連接起來,他們應該給出一些理由。執行特定與否,並說這種方法可能在發生I/O錯誤時拋出IOException不夠好。無論如何,我懶得拉這個源代碼。如果您確實發現了任何問題,請使用此信息更新您的答案。如果沒有其他人提供新的信息,我會在一段時間後接受。 – initramfs