2012-02-21 18 views
6

Tôi đang viết một ứng dụng java trong đó có giao tiếp với có để giao tiếp với một đài phát thanh XBee hơn một usb-cable.To làm được điều này, tôi sử dụng các API xbee-java (http://code.google.com/p/xbee-api/)Làm cách nào để chạy API được tạo cho 32 bit trên máy tính 64 bit?

On cũ của tôi 32 máy bit, tất cả đều hoạt động tốt. Nhưng khi tôi nhập dự án vào máy 64 bit, nó sẽ ngay lập tức ném một ngoại lệ có nội dung: "Không thể tải tập tin .dll 32-bit IA trên nền tảng AMD 64 bit". Tôi không có bất kỳ ý tưởng làm thế nào tôi có thể giải quyết vấn đề này.

mã lỗi:

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) 

Cảm ơn, Tom

Trả lời

7

Không thể tải một DLL 32-bit vào một quá trình 64-bit.

Dựa trên mô tả, JVM bạn đang chạy là 64 bit nhưng DLL rxtxSerial.dll là 32 bit. Để giải quyết, hoặc là:

  • Lấy 64-bit rxtxSerial.dll, hoặc
  • Cài đặt và sử dụng 32-bit JVM với hiện tại rxtxSerial.dll
6

Một 64-bit thực thi (và quá trình) (Java của bạn VM) chỉ có thể sử dụng các tệp DLL 64 bit.

Nhưng bạn có thể tải xuống, cài đặt và chạy phiên bản Java 32 bit. Trừ khi bạn cũng cần truy cập 64 bit DLL hoặc cần nhiều hơn 2 đến 3 GB bộ nhớ, máy ảo Java 32 bit sẽ chạy tốt trên máy 64 bit.

1

Dường như Thư viện XBee của bạn dựa vào JNI để gọi một số mã gốc được nhúng trong một DLL.

bạn không thể liên kết DLL này trong Máy ảo Java 64Bit và điều đó là bình thường.

Vì vậy, bạn sẽ có: - để biên dịch lại XBee nếu bạn có quyền truy cập vào mã nguồn. - để nhận phân phối 64Bit của API

Sử dụng máy ảo Java 32Bit để thực thi mã của bạn.