获取java.nio.channels.CancelledKeyException而不显式取消密钥

获取java.nio.channels.CancelledKeyException而不显式取消密钥,java,nio,socketchannel,Java,Nio,Socketchannel,我一直从以下位置得到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() 一条重要的

我一直从以下位置得到
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上的测试环境中,多台机器之间正在进行通信,我突然终止了机器中作为通信目标的进程。但是,我无法将此异常出现时间与任何启动的进程终止关联起来。如果基础套接字断开连接或存在网络连接问题,是否会发生这种情况


谢谢

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

当基础频道关闭时,键会自动取消。您应该在迭代
selectedKeys
时检查有效键,如果您的事件处理程序可以关闭通道(至少在读取处理程序中应该关闭通道),那么您应该在调用
InterestTops(),
isWritable(),
等之前检查键的有效性