2012-02-21 9 views
6

मैं यह कर, मैं xbee-जावा एपीआई (http://code.google.com/p/xbee-api/)64-बिट मशीन पर 32-बिट के लिए बनाई गई एपीआई कैसे चलाएं?

का उपयोग मेरे पुराने पर एक usb-cable.To पर एक XBee रेडियो के साथ संवाद करने के साथ संवाद करने के लिए है जो एक जावा आवेदन लिख रहा हूँ 32- बिट मशीन यह सब ठीक काम किया। लेकिन जब मैंने 64-बिट मशीन पर प्रोजेक्ट आयात किया, तो यह तुरंत एक अपवाद फेंकता है जो कहता है: "एएमडी 64-बिट प्लेटफ़ॉर्म पर आईए 32-बिट। डीएल लोड नहीं कर सकता"। मुझे नहीं पता कि मैं इस समस्या को कैसे हल कर सकता हूं।

त्रुटि कोड:

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

यह एक 64-बिट प्रक्रिया में एक 32-बिट DLL लोड करने के लिए संभव नहीं है।

विवरण के आधार पर, आप जो जेवीएम चला रहे हैं वह 64-बिट है लेकिन डीएलएल rxtxSerial.dll 32-बिट है। हल करने के लिए, या तो:

  • प्राप्त 64-बिट rxtxSerial.dll, या
  • स्थापित करें और (अपने जावा वर्तमान rxtxSerial.dll
6

एक 64-बिट निष्पादन योग्य (और इस प्रक्रिया) के साथ 32-बिट JVM का उपयोग वीएम) केवल 64 बिट डीएलएल का उपयोग कर सकते हैं।

लेकिन आप जावा के 32-बिट संस्करण को डाउनलोड, इंस्टॉल और चला सकते हैं। जब तक आपको 64 बिट डीएलएल तक पहुंचने की आवश्यकता नहीं है या 2 से 3 जीबी मेमोरी की आवश्यकता नहीं है, 32 बिट जावा वीएम 64 बिट मशीन पर ठीक चल जाएगा।

1

ऐसा लगता है कि आपकी एक्सबी लाइब्रेरी एक डीएलएल में एम्बेडेड कुछ देशी कोड को कॉल करने के लिए जेएनआई पर निर्भर करती है।

आप इस DLL को 64 बिट जावा वर्चुअल मशीन के भीतर लिंक नहीं कर सकते हैं, और यह सामान्य है।

तो, आपके पास या तो होगा: - यदि आपके पास स्रोत कोड तक पहुंच है तो XBee को पुन: संकलित करने के लिए। - एपीआई

का 64 बिट वितरण प्राप्त करने के लिए अपने कोड को निष्पादित करने के लिए जावा 32 बिट वीएम का उपयोग करें।

1

चेक https://github.com/NeuronRobotics/nrjavaserial

यह जार (विंडोज, लिनक्स, मैक, 32 और 64) के अंदर कई देशी संग्रहालय शामिल हैं और उन्हें अपने आप लोड तो आप JVM को कहने के बारे में भूल जाते हैं कि उन्हें

संबंधित मुद्दे