2012-02-21 10 views
6

Piszę aplikacji java, który musi komunikować się ze musi komunikować się z radia XBee nad usb-cable.To to zrobić, używam XBee-Java API (http://code.google.com/p/xbee-api/)Jak uruchomić API stworzony dla wersji 32-bitowej na komputerze 64-bitowym?

na moim starym 32- Maszyna bitowa wszystko działało dobrze. Ale kiedy zaimportowałem projekt na maszynę 64-bitową, natychmiast rzuca wyjątek, który mówi: "Nie można załadować 32-bitowego .Dll IA na 64-bitowej platformie AMD". Nie mam pojęcia, jak rozwiązać ten problem.

kod błędu:

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) 

Dzięki, Tom

Odpowiedz

7

Nie można załadować 32-bitowej DLL do procesu 64-bitowej.

W oparciu o opis, wirtualna maszyna wirtualna, której używasz, jest 64-bitowa, ale biblioteka DLL rxtxSerial.dll jest 32-bitowa. Aby rozwiązać, albo:

  • uzyskać 64-bitowe rxtxSerial.dll lub
  • zainstalować i korzystać z 32-bitowej JVM z obecnym rxtxSerial.dll
6

64-bitowego pliku wykonywalnego (i procesu) (Twój Java VM) może używać tylko 64-bitowych bibliotek DLL.

Ale można pobrać, zainstalować i uruchomić 32-bitową wersję Java. Jeśli nie potrzebujesz również dostępu do 64-bitowych bibliotek DLL lub potrzebujesz więcej niż 2 do 3 GB pamięci, 32-bitowa maszyna wirtualna Java będzie działać poprawnie na komputerze 64-bitowym.

1

Wygląda na to, że Twoja biblioteka XBee opiera się na JNI, aby wywołać jakiś kod natywny osadzony w bibliotece DLL.

Nie można połączyć tej biblioteki DLL z wirtualną maszyną Java 64-bitową, a to normalne.

Będziesz mieć: - aby przekompilować XBee, jeśli masz dostęp do kodu źródłowego. - aby uzyskać 64-bitową dystrybucję interfejsu API

Użyj maszyny wirtualnej Java 32Bit do wykonania kodu.