MATLAB

2011-08-08 12 views
6

से जावा को कॉल करना मैं C++ में लिखी गई लाइब्रेरी के लिए जावा रैपर बनाने के लिए Swig का उपयोग कर रहा हूं। रैपर एक पैकेज में उत्पन्न होते हैं और फिर jar 'ed। फ़ाइलों को सही ढंग से संकलित किया गया है और जावा के साथ पूरी तरह से काम करते हैं लेकिन मैं इसे MATLAB से नहीं कह सकता।MATLAB

मैं जार फ़ाइल में MATLAB में स्थिर जावा पथ फ़ाइल में जार के लिए पथ को जोड़ने और कक्षाएं तो बुला की कोशिश की लेकिन मैं त्रुटि "Undefined variable or class.." जाते हैं या यदि मैं javaObject(...)"No class * can be located on Java class path" उपयोग करके देखें।

मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं।


संपादित करें:

एक C++ MATLAB से पुस्तकालय बुला परीक्षण करने के लिए, मैं एक साधारण "डेटा पाठक" वर्ग और एक समारोह है जो एक समारोह है कि एक पाठ फ़ाइल और करने के लिए यादृच्छिक रूप से जनरेट vector< vector<double> > लिखते शामिल बनाया कि इसे पढ़ता है

बड़ा घूँट उत्पन्न फ़ाइलों हैं: SimpleReader.java, DoubleVector.java, exampleJNI.java, example.java, पैकेज com.example.reader में DoubleVector2.java। इन्हें example.jar में संकलित और पैक किया गया है (जेनरेट की गई लाइब्रेरी डीएल भी जार में पैक की जाती है)।

यह सब जावा से इसे ठीक से कॉल करने में काम करता है ताकि समस्या MATLAB के लिए विशिष्ट हो। MATLAB के लिए बहुत अधिक कोड नहीं है क्योंकि कुछ भी काम नहीं करता है। यदि आप ऐसा करने में सक्षम होना चाहिए रहे हैं मैं जहाँ तक

javaclasspath('c:/reader/reader.jar'); 
obj = com.example.reader.SimpleReader; 

और इस बिंदु पर मैं 'Undefined variable "com" or class "com.example.reader.SimpleReader"'

+0

क्या MATLAB बयान आप को क्रियान्वित कर रहे हैं के एक अधिक विस्तृत उदाहरण दे। –

उत्तर

7

सामान्य तौर पर प्राप्त हो:

javaclasspath('/path/to/myjar.jar') 
myobj = com.example.mypackage.MyObject; 
myobj.someMethod(123); 

मैं MATLAB के साथ इस का उपयोग कर थोड़ी देर के लिए और कोई परेशानी नहीं है। शायद आप सटीक MATLAB कोड पोस्ट कर सकते हैं जिसका आप उपयोग कर रहे हैं?


मैं जहाँ तक

javaclasspath('c:/reader/reader.jar'); 
obj = com.example.reader.SimpleReader; 

और इस बिंदु पर मैं 'अपरिभाषित चर "कॉम" या वर्ग "com.example.reader.SimpleReader"'

खैर, शुरुआत करने वालों के लिए, आपने बताया कि आपके जर्फ़ाइल को example.jar कहा जाता है, लेकिन आपका MATLAB कोड संदर्भ reader.jar - क्या आप सुनिश्चित हैं कि जार आप javaclasspath() exis में संदर्भित कर रहे हैं ts? क्या आपने इसकी सामग्री को देखने की कोशिश की है? (उदाहरण के लिए 7zip या किसी भी प्रोग्राम है कि ज़िप प्रारूप फ़ाइलों को पढ़ सकता है, क्योंकि .jar फ़ाइलें सिर्फ अतिरिक्त विशिष्टताओं के साथ ज़िप प्रारूप फ़ाइलें हैं के साथ)


हममम ...

  • कौन सा संस्करण MATLAB का उपयोग कर रहे हैं?
  • आपकी कक्षाएं सार्वजनिक हैं?
  • जब आप निम्न लिखकर कोशिश क्या मिलता है:

    javap -classpath c:/reader/example.jar com.example.reader.SimpleReader 
    

आप कहते हैं कि आप संस्करण 7.0.4 का उपयोग कर रहे हैं - यह संभावित समस्या है। Earlier versions of MATLAB use an older version of the Java JRE:

MATLAB केवल JVM पर पूरी तरह से समर्थित है जिसे हम MATLAB के साथ भेजते हैं।

JVM 1.3.1 MATLAB 6.5.1 (R13SP1) के लिए

JVM 1.4.2 MATLAB 7.0.1 (R14SP1)

MATLAB 7.0.4 (R14SP2) और बाद के संस्करणों तक के लिए उदाहरण के लिए: MATLAB 7.4 (R2007a) JVM 1.5 और MATLAB 7.5 (R2007b) का उपयोग करें और बाद में JVM 1.6 का उपयोग करें। ऐसे घटक हैं जो JVM के किसी भिन्न संस्करण के तहत ठीक से काम नहीं कर सकते हैं।

आपके मूल रूप से इस बिंदु पर तीन विकल्प हैं।

  • (यदि संभव हो तो) - केवल जार फ़ाइलों को इस मामले में जावा 5. के साथ संगत कर रहे हैं, आप अपने खुद के पुस्तकालय बना रहे हैं के बाद से उपयोग करते हैं, आप the -target 1.5 option उपयोग करने के लिए की जरूरत है। (target="1.5" यदि आप चींटी <javac> कार्य का उपयोग कर रहे हैं) यह आमतौर पर एक बड़ा सौदा नहीं है, क्योंकि 1.6 1.5 से बढ़ता हुआ सुधार है - हालांकि यदि आप कुछ जावा 6 कक्षाओं जैसे ArrayDeque, या बाहरी पुस्तकालय जो 1.6 पर निर्भर करते हैं, आप भाग्य से बाहर हैं।

  • मैटलैब 7.4 के साथ जेआरई 1.6 का उपयोग changing the JVM के साथ करें। यकीन नहीं है कि यह एक अच्छा विचार है।

  • जावा 6 (आर 2007 बी या बाद में) पर चलने वाले संस्करण में MATLAB को अपग्रेड करें।

इस मुद्दे याद रखें कि जब आप जावा 7 या जावा 8. करने के लिए अपने जावा विकास के वातावरण के उन्नयन के लिए जाना

+0

^मैंने प्रश्न के बारे में अधिक जानकारी दी, धन्यवाद – ssaammuu

+0

माफी माँगना मेरा मतलब जवाक्लासस्पाथ ('c: /reader/example.jar'); मैंने यह भी सुनिश्चित किया कि जार-टीएफ का उपयोग करके सबकुछ वहां था, और उसके बाद जार फ़ाइल को 7zip के साथ खोलने के मामले में। – ssaammuu

+0

मैं मैटलैब 7.0.4 का उपयोग कर रहा हूं। कक्षाएं सार्वजनिक हैं और सार्वजनिक तर्ककार हैं जिनमें कोई तर्क नहीं है। में उस आदेश के परिणाम: से संकलित "SimpleReader.java" सार्वजनिक वर्ग com.example.reader.SimpleReader फैली java.lang.Object { // तरीकों // जो सही लग रही की सूची} – ssaammuu