#java #netty #abstractmethoderror
Вопрос:
Недавно я работаю с netty и отправляю пакеты между NettyClient и сетевым сервером. К сожалению, я получаю следующий java.lang.Абстрактметодеррор:
java.lang.AbstractMethodError: io.netty.channel.SimpleChannelInboundHandler.channelRead0(Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Object;)V
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:326)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:313)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:427)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:281)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1422)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:931)
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:792)
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:502)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:407)
at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1050)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
Эта ошибка возникает, когда мой клиент получает пакет с сервера. С другой стороны, все работает нормально. Я уже проверил версии обеих программ, и они используют артефакт netty-all версии 5.0.0.Alpha2.
Код моего SimpleChannelInboundHandler моего клиента выглядит следующим образом:
package de.jackboyplay.nettyclient.mechanics;
import de.jackboyplay.nettyclient.packets.Packet;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
public class NetworkHandler extends SimpleChannelInboundHandler<Packet>{
@Override
protected void messageReceived(ChannelHandlerContext chc, Packet packet) {
packet.handle();
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
ctx.close();
}
}
~Игра в джекбоя
Комментарии:
1. Эта ошибка означает, что вы запускаете свою программу с несовместимым набором библиотек. Одна библиотека A ожидает, что определенный метод будет существовать в другой библиотеке B, но это не так, потому что вы используете неправильную версию библиотеки B. Чтобы действительно выяснить точную причину, вам придется погрузиться в детали и проанализировать все зависимости вашего проекта.
2. @Jesper можно ли как-то определить строку или библиотеку, которая вызывает это?
3. Я проверил свои библиотеки, и ни одна из них не использует нетти. Единственный, которым я пользуюсь, — это ломбок.
Ответ №1:
Вы должны использовать netty 4.1.x (используйте последнюю версию). То, что вы видите здесь, является результатом проблемы с путем к классу.
Комментарии:
1. Я хотел, но у меня нет репутации, чтобы сделать это в данный момент. Извините. Я обязательно сделаю это в будущем!