Android上的Jeromq:没有虚拟方法clear()Ljava / nio / ByteBuffer

问题描述 投票:1回答:1

我正在尝试将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");
zsocket.send("test",0);

在连接呼叫中,发生错误:

2019-09-26 16:59:53.033 18347-18379 /? E / AndroidRuntime:致命例外:Thread-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.flironeexampleapplication.GLPreviewActivity.onDeviceConnected(GLPreviewActivity.java:115)在com.flir.flironesdk.EmbeddedDevice $ 4.run(EmbeddedDevice.java:512)在java.lang.Thread.run(Thread.java:764)

我的环境:

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

任何问题的想法?非常感谢。

java android zeromq jeromq
1个回答
0
投票

如果有人从未使用ZeroMQ,您可能会喜欢这里先看看“ ZeroMQ Principles in less than Five Seconds或查看other posts here在深入了解更多细节之前


鉴于代码甚至没有尝试检测,处理与ZeroMQ相关的潜在错误状态(在ZeroMQ API中有充分记录)的工作量也就越少,问题的“远程”检查范围也就有限。因此,主要疑问(无法测试的嫌疑人)来自zsocket.connect("tcp://my_other_device");

在这里使用tcp://的ZeroMQ transport-class的选择,除了上述传输类选择器<tcp://>之外,还需要明确的合法值规范都

  • <address-part> == { IP_ADDRESS | symbolic_name_resolvable_to_IP_ADDRESS }

  • [<port-part> == ":<aLegalTcpPortNUMBER>"用于正确的协议引擎设置,显然在发布的代码示例中缺少。

最后但并非最不重要的是,在许多情况下,发送可能且在法律上必须抛出异常:

(如API中所记录:)EAGAIN已请求非阻止模式,并且此刻无法发送消息。ENOTSUP此套接字类型不支持zmq_send()操作。EINVAL发送方尝试发送多部分数据,套接字类型不允许。EFSM由于套接字未处于适当的状态,因此目前无法在此套接字上执行zmq_send()操作。在几种状态之间切换的套接字类型(例如ZMQ_REP)可能会发生此错误。有关更多信息,请参见zmq_socket(3)的消息传递模式部分。ETERM与指定套接字关联的ØMQ上下文已终止。ENOTSOCK提供的套接字无效。EINTR在发送消息之前,操作已被信号传递中断。EHOSTUNREACH该消息无法路由。

© www.soinside.com 2019 - 2024. All rights reserved.