1

我一直被java.nio.channels.CancelledKeyException抛出:

at sun.nio.ch.SelectionKeyImpl.ensureValid(SelectionKeyImpl.java:55)
at sun.nio.ch.SelectionKeyImpl.interestOps(SelectionKeyImpl.java:64)

但是,我java.nio.channels.SelectionKey.cancel()在任何时候都没有明确地调用。

一条重要的信息是,这发生在我在 EC2 上运行的测试环境中,并且在多台机器之间进行通信,我突然终止了作为通信目标的机器中的进程。但是,我无法将这个异常出现时间与任何启动的进程终止相关联。如果底层套接字断开连接或存在网络连接问题,会发生这种情况吗?

谢谢

4

1 回答 1

1

当底层通道关闭时,密钥会自动取消。您应该在迭代时检查有效键selectedKeys,并且如果您的事件处理程序可以关闭通道,至少在读取处理程序的情况下应该如此,您应该在调用之前检查键的有效性interestOps(), isWritable(),等。

于 2012-10-17T01:25:34.360 回答