2012-02-21 19 views
6

Sto scrivendo un'applicazione Java che deve comunicare con deve comunicare con una radio XBee nel corso di un usb-cable.To fare questo, io uso l'API XBee-java (http://code.google.com/p/xbee-api/)Come eseguire un'API fatta per 32-bit su una macchina a 64-bit?

Sul mio vecchio 32- bit machine ha funzionato tutto bene. Ma quando ho importato il progetto in una macchina a 64 bit, genera immediatamente un'eccezione che dice: "Impossibile caricare .dll IA a 32 bit su una piattaforma AMD a 64 bit". Non ho idea di come posso risolvere questo problema.

il codice di errore:

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) 

Grazie, Tom

risposta

7

Non è possibile caricare una DLL a 32 bit in un processo a 64 bit.

In base alla descrizione, la JVM in esecuzione è a 64 bit ma la DLL rxtxSerial.dll è a 32 bit. Per risolvere, sia:

  • ottenere 64 bit rxtxSerial.dll, o
  • installare e utilizzare a 32 bit JVM con l'attuale rxtxSerial.dll
6

un file eseguibile a 64 bit (e di processo) (il vostro Java VM) può utilizzare solo DLL a 64 bit.

Ma è possibile scaricare, installare ed eseguire una versione di Java a 32 bit. A meno che non sia necessario accedere a DLL a 64 bit o richiedere più di 2 o 3 GB di memoria, la VM Java a 32 bit funzionerà correttamente su una macchina a 64 bit.

1

Sembra che la libreria XBee si basi su JNI per chiamare un codice nativo incorporato in una DLL.

non è possibile collegare questa DLL all'interno di una Java Virtual Machine a 64 bit, ed è normale.

Quindi, è possibile: - ricompilare XBee se si ha accesso al codice sorgente. - per ottenere una distribuzione 64 bit dell'API

Utilizzare una VM Java 32 Bit per eseguire il codice.

Problemi correlati