2012-01-15 43 views
3

爲什麼當我試圖關閉頻道,我得到ChannelClosedException拋出? 封閉性Channel.close(),異常的堆棧跟蹤:Netty:ClosedChannelException當關閉頻道

java.nio.channels.ClosedChannelException 
    at org.jboss.netty.channel.socket.nio.NioWorker.cleanUpWriteBuffer(NioWorker.java:645) 
    at org.jboss.netty.channel.socket.nio.NioWorker.close(NioWorker.java:601) 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.handleAcceptedSocket(NioServerSocketPipelineSink.java:119) 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.eventSunk(NioServerSocketPipelineSink.java:76) 
    at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:60) 
    at org.jboss.netty.channel.Channels.close(Channels.java:720) 
    at org.jboss.netty.channel.AbstractChannel.close(AbstractChannel.java:200) 
    at ru.greencubes.player.PlayerWorkerThread.closeConnection(PlayerWorkerThread.java:107) 
    at ru.greencubes.player.PlayerWorkerThread.shutDown(PlayerWorkerThread.java:282) 
    at ru.greencubes.player.NetworkPlayerThread.disconnect(NetworkPlayerThread.java:1289) 
    at ru.greencubes.player.NetworkPlayerThread.disconnect(NetworkPlayerThread.java:1272) 
    at ru.greencubes.server.Server.run(Server.java:1590) 
    at ru.greencubes.server.ServerThread.run(ServerThread.java:12) 

回答

3

我想你應該忽略這一點。它只是告訴你,當它試圖將剩餘的字節寫入通道時,通道已經關閉。所以沒有什麼可擔心的。

+0

我得到了同樣的問題。有什麼方法可以確保在關閉它之前將其餘字節寫入通道?我有'ch.write(msg); ch.close();' – Dennis 2012-01-19 00:38:52

+0

是的......使用ChannelFuture。 ch.write(msg).addListener(ChannelFuture.CLOSE); – 2012-01-19 06:23:13

+0

CLOSE在ChannelFuture中不存在。 – Dennis 2012-01-23 16:09:26