gpt4 book ai didi

Java NIO 异常

转载 作者:行者123 更新时间:2023-12-02 04:53:35 24 4
gpt4 key购买 nike

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

private void broadcast(String msg, String user)    
{
String Message = user + ":" + msg + "\0";
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$1.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 被记录为完全不可修改,而后者返回的 Set 与您分配结果的变量名称更一致,被记录为允许元素去除。此外,选定的键是准备进行 I/O 的键。

关于Java NIO 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28998453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com