public class TimeEncoder extends ChannelOutboundHandlerAdapter { @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { UnixTime m = (UnixTime)msg; ByteBuf encoded = ctx.alloc().buffer(4); encoded.writeInt((int)m.value()); ctx.write(encoded,promise);//(1) promise.setSuccess(); } }
报:Failed to mark a promise as success because it has succeeded already
解决:
法1:write方法中的promise去掉。因为,write中带参数 promise,会自动执行promise.setSuccess();
法2:去掉promise.setSuccess();
promise目的是通知ChannelFutureListener执行。