2012-02-21 14 views
6

Estoy escribiendo una aplicación Java que tiene para comunicarse con tiene que comunicarse con una radio XBee durante un usb-cable.To hacer esto, yo uso el API XBee-java (http://code.google.com/p/xbee-api/)¿Cómo ejecutar una API hecha para 32 bits en una máquina de 64 bits?

En mi viejo 32- máquina de bit todo funcionó bien. Pero cuando importé el proyecto a una máquina de 64 bits, lanza inmediatamente una excepción que dice: "No se puede cargar IA-32-bit .dll en una plataforma AMD de 64 bits". No tengo idea de cómo puedo resolver este problema.

el código de error:

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) 

Gracias, Tom

Respuesta

7

No es posible cargar una DLL de 32 bits en un proceso de 64 bits.

Según la descripción, la JVM que está ejecutando es de 64 bits, pero la DLL rxtxSerial.dll es de 32 bits. Para resolver, ya sea:

  • obtener 64 bits rxtxSerial.dll o
  • instalar y utilizar la JVM de 32 bits con la corriente rxtxSerial.dll
6

un ejecutable de 64 bits (y el proceso) (de Java VM) solo puede usar archivos DLL de 64 bits.

Pero podría descargar, instalar y ejecutar una versión de 32 bits de Java. A menos que también necesite acceder a archivos DLL de 64 bits o necesite más de 2 a 3 GB de memoria, la máquina virtual Java de 32 bits se ejecutará correctamente en una máquina de 64 bits.

1

Parece que su Biblioteca XBee confía en JNI para llamar a algún código nativo incrustado en una DLL.

no se puede vincular esta DLL dentro de una máquina virtual Java de 64 bits, y eso es normal.

Por lo tanto, tendrá: - para recompilar XBee si tiene acceso al código fuente. - para obtener una distribución de 64 bits de la API

Utilice una máquina virtual Java 32Bit para ejecutar su código.

Cuestiones relacionadas