2012-02-21 167 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虛擬機執行您的代碼。

相關問題