SelectionKeysはタイムズjava.lang.UnsupportedOperationExceptionエラーを削除しています
昨日の夜、java nio通信を書いたとき、次の異常を報告して、ネットで長い間探して、やっと解決しました.
Exception in thread "main"java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection$1.remove(Collections.java:1012)
エラーの原因は次のコードです.
最後の行でエラーが発生し、このエラーが発生しても憂鬱で、長い間デバッグしても結果が出ず、ソースコードからも原因が見つからない.
JAva公式資料(
http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=c7a0b0ec57e0dffffffffd21d2237d896878?bug_id=5098171)では、これはバグではないと説明し、サンプルコードを示し、エラーの場所と解決策も指摘した.selector.keys()をselector.selectedKeys()に変えるだけでいいです.
英語のドキュメントを見る必要があると思います.英語のドキュメントはすでに明確なヒントを与えているからです.“Keys are added to the selected-key set by selection operations. A key may be removed directly from the selected-key set by invoking the set's remove method or by invoking the remove method of an iterator obtained from the set. Keys are never removed from the selected-key set in any other way; they are not, in particular, removed as a side effect of selection operations.Keys may not be added directly to the selected-key set.(t of selection operations.Keys.not be added directly to the selected-key set.)
Exception in thread "main"java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection$1.remove(Collections.java:1012)
エラーの原因は次のコードです.
Selector selector = Selector.open();
Iterator<SelectionKey> it = selector.keys().iterator();
while(it.hasNext()) {
SelectionKey key = it.next();
it.remove();
最後の行でエラーが発生し、このエラーが発生しても憂鬱で、長い間デバッグしても結果が出ず、ソースコードからも原因が見つからない.
JAva公式資料(
http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=c7a0b0ec57e0dffffffffd21d2237d896878?bug_id=5098171)では、これはバグではないと説明し、サンプルコードを示し、エラーの場所と解決策も指摘した.selector.keys()をselector.selectedKeys()に変えるだけでいいです.
英語のドキュメントを見る必要があると思います.英語のドキュメントはすでに明確なヒントを与えているからです.“Keys are added to the selected-key set by selection operations. A key may be removed directly from the selected-key set by invoking the set's remove method or by invoking the remove method of an iterator obtained from the set. Keys are never removed from the selected-key set in any other way; they are not, in particular, removed as a side effect of selection operations.Keys may not be added directly to the selected-key set.(t of selection operations.Keys.not be added directly to the selected-key set.)