Java NIO 异常

Java NIO Exception

嗨,我正在尝试使用 NIO 进行聊天,在服务器部分与主线程分开时,我:

private void broadcast(String msg, String user)    
{
    String Message = user + ":" + msg + "[=11=]";
    System.out.println(Message);
    ByteBuffer buf=ByteBuffer.wrap(Message.getBytes());
    Set<SelectionKey> selectedKeys  = selector.keys();
    Iterator<SelectionKey> keyIterator = selectedKeys.iterator();

    while(keyIterator.hasNext()) 
    {
        SelectionKey key = keyIterator.next();
        if(key.attachment() != user)
        {
            try {
                ((SocketChannel) key.channel()).write(buf);
            } catch (IOException e) {
                e.printStackTrace();
            }
            buf.rewind();
        }
        keyIterator.remove();
    }
}

我得到这个异常:

java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.remove(Unknown Source)
at chatserver.MessageSender.broadcast(MessageSender.java:41)
at chatserver.MessageSender.run(MessageSender.java:113)
at java.lang.Thread.run(Unknown Source)

第 41 行是:keyIterator.remove(); 我以此为指导:Java NIO Tutorial

您正在调用 Selector.keys() 您似乎想要 Selector.selectedKeys() 的地方。前者返回的 Set 被记录为完全不可修改,而后者返回的 - 与您分配结果的变量的名称更好地一致 - 被记录为允许删除元素。此外,所选键是为 I/O.

准备的键