2

我正在尝试将 jeromq 用于 android 项目。我需要连接到另一个经销商设备。这是我的代码:

ZContext zcontext = new ZContext(1);
ZMQ.Socket zsocket = zcontext.createSocket(ZMQ.DEALER);
String identity = "S61_phone";
zsocket.setIdentity(identity.getBytes(ZMQ.CHARSET));
zsocket.connect("tcp://my_other_device_ip_and_port_here");
zsocket.send("test",0);

在 connect 调用中,发生错误:

2019-09-26 16:59:53.033 18347-18379/? E/AndroidRuntime:致命异常:线程 4 进程:com.flir.flironeexampleapplication,PID:18347 java.lang.NoSuchMethodError:没有虚拟方法 clear()Ljava/nio/ByteBuffer;在类 Ljava/nio/ByteBuffer 中;或其超类('java.nio.ByteBuffer' 的声明出现在 /system/framework/core-oj.jar 中)在 zmq.Signaler.send(Signaler.java:97) 在 zmq.Mailbox.send(Mailbox.java :71) 在 zmq.Ctx.sendCommand(Ctx.java:517) 在 zmq.ZObject.sendCommand(ZObject.java:382) 在 zmq.ZObject.sendPlug(ZObject.java:185) 在 zmq.ZObject.sendPlug(ZObject .java:175) 在 zmq.Own.launchChild(Own.java:115) 在 zmq.SocketBase.addEndpoint(SocketBase.java:590) 在 zmq.SocketBase.connect(SocketBase.java:582) 在 org.zeromq.ZMQ $Socket.connect(ZMQ.java:2531) 在 com.flir。

我的环境:

  • 杰罗姆克 0.5.2
  • 执行代码的目标设备是 Android 8.1 (Oreo)
  • 使用 JDK 1.8.0_66 / ndk r10e 在 Android Studio 中编译

知道有什么问题吗?非常感谢。

4

1 回答 1

4

我在这里找到了解释和解决方法

Java 9 为驱动程序使用的 java.nio.ByteBuffer 中的以下方法引入了具有协变返回类型的覆盖方法。

  • 位置
  • 限制
  • 翻动
  • 清除

在 Java 9 中,它们现在都返回一个 ByteBuffer ,而它们覆盖的方法返回 Buffer,在 Java 8 及更低版本上执行时会导致类似这样的异常。

这是因为生成的字节码包含方法的静态返回类型,> 在 Java 8 及更低版本中找不到,因为不存在具有协变 > 返回类型的重载方法。

解决方案是在调用方法之前将 ByteBuffer 实例强制转换为 Buffer。

于 2019-10-17T15:08:04.760 回答