8

我正在编写一个必须与之通信的 java 应用程序必须通过 USB 电缆与 XBee 无线电通信。为此,我使用 xbee-java API ( http://code.google.com/p/xbee -api/ )

在我的旧 32 位机器上一切正常。但是当我将项目导入 64 位机器时,它会立即抛出一个异常,上面写着:“Can't load IA 32-bit .dll on a AMD 64-bit platform”。我不知道如何解决这个问题。

错误代码:

    java.lang.UnsatisfiedLinkError: C:\Users\Tom\Documents\XbeeJava\rxtxSerial.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform thrown while loading gnu.io.RXTXCommDriver
Closing connection with local XBee
Exception in thread "Thread-1" java.lang.UnsatisfiedLinkError: C:\Users\Tom\Documents\XbeeJava\rxtxSerial.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
    at com.rapplogic.xbee.RxTxSerialComm.openSerialPort(RxTxSerialComm.java:71)
    at com.rapplogic.xbee.RxTxSerialComm.openSerialPort(RxTxSerialComm.java:61)
    at com.rapplogic.xbee.api.XBee.open(XBee.java:140)
    at me.server.HardwareCommunications.SensorListener.run(SensorListener.java:47)
    at java.lang.Thread.run(Unknown Source)

谢谢,汤姆

4

5 回答 5

9

无法将 32 位 DLL 加载到 64 位进程中。

根据描述,您运行的 JVM 是 64 位的,但 DLLrxtxSerial.dll是 32 位的。要解决,要么:

  • 获得 64-bit rxtxSerial.dll,或
  • 安装和使用 32 位 JVM 与当前rxtxSerial.dll
于 2012-02-21T14:18:55.977 回答
6

64 位可执行文件(和进程)(您的 Java VM)只能使用 64 位 DLL。

但是您可以下载、安装和运行 32 位版本的 Java。除非您还需要访问 64 位 DLL 或需要超过 2 到 3 GB 的内存,否则 32 位 Java VM 将在 64 位机器上正常运行。

于 2012-02-21T14:19:15.457 回答
5

您可以在此处获取 rxtx 的 64 位 dll:http: //www.cloudhopper.com/opensource/rxtx/

于 2012-02-21T14:31:05.530 回答
1

您的 XBee 库似乎依赖 JNI 来调用嵌入在 DLL 中的一些本机代码。

您不能在 64 位 Java 虚拟机中链接此 DLL,这很正常。

因此,您将拥有: - 如果您可以访问源代码,则可以重新编译 XBee。- 获取 API 的 64 位分布

使用 Java 32Bit VM 来执行您的代码。

于 2012-02-21T14:20:19.720 回答
1

检查https://github.com/NeuronRobotics/nrjavaserial

它在 jar 中包含几个本机库(windows、linux、mac、32 和 64)并自动加载它们,因此您忘记告诉 JVM 在哪里找到它们

于 2015-11-23T10:37:20.100 回答