2012-02-21 194 views
6

我正在写有与一的XBee无线在usb-cable.To沟通做到这一点,我使用的XBee-的Java API(http://code.google.com/p/xbee-api/如何运行64位机器上的32位API?

在我的旧通信的Java应用程序32它一切工作正常。 但是,当我将该项目导入到64位机器时,它立即引发一个异常,并显示:“无法在AMD 64位平台上加载IA 32位.dll”。 我不知道如何解决这个问题。

错误代码:

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) 

谢谢,汤姆

回答

7

这是不可能的一个32位的DLL加载到64位的处理。

根据描述,您正在运行的JVM是64位,但DLL rxtxSerial.dll是32位。要解决,或者:

  • 获取64位rxtxSerial.dll,或
  • 安装并使用32位JVM当前rxtxSerial.dll
6

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

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

1

看来你的XBee库依靠JNI来调用嵌入在DLL中的一些本地代码。

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

因此,您将拥有: - 如果您有权访问源代码,请重新编译XBee。 - 获得API的64Bit分发版使用Java 32Bit虚拟机执行您的代码。

相关问题