2014-07-04 15 views
13

के माध्यम से जावास्क्रिप्ट में एक जार का उपयोग करें मुझे जावास्क्रिप्ट के अंदर एक जार फ़ाइल से कक्षाओं का उपयोग करने की आवश्यकता है। मैं जावा ScriptEngine के माध्यम से जावास्क्रिप्ट का उपयोग कर रहा है और मैं Jython यहाँ के साथ क्या किया था के लिए इसी तरह कुछ करना चाहते हैं,जावा स्क्रिप्टइंजिन

import org.python.core.Py; 
    import org.python.core.PySystemState; 
    ... 
    PySystemState engineSys = new PySystemState(); 
    engineSys.path.append(Py.newString("C:/GMSEC_API/bin/gmsecapi.jar")); 
    Py.setSystemState(engineSys); 
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("python"); 

जब मैं Jython के साथ ऐसा कर यह ठीक काम करता है और अजगर फ़ाइलें एपीआई कक्षाएं हैं कि उपयोग कर सकते हैं जार फ़ाइल के अंदर।

+0

जार एक जावा संग्रह है। जावास्क्रिप्ट के साथ इसका कोई लेना-देना नहीं है। – MightyPork

+13

जावास्क्रिप्ट जावा से कक्षाओं का उपयोग कर सकते हैं। मैं जिस जावा क्लास का उपयोग करना चाहता हूं वह जार फ़ाइल में है। क्या आपको पाइथन/ज्योथन के साथ उपरोक्त कोड के साथ विचार नहीं दिख रहा है? –

उत्तर

6

मैं इस प्रकार जावास्क्रिप्ट के भीतर जार के वर्गों का उपयोग करने में सक्षम हूं, लेकिन जब आप इसे चलाने के लिए जाते हैं तो आपको जार सेट को क्लास पथ पर सेट करना होगा। मैं ज्योथन/पायथन के समान समाधान के बाद था जहां आप जावा के अंदर जार सेट करने में सक्षम हैं लेकिन मैं बस बैच फाइलें और sh फाइलें बनाने जा रहा हूं और इसे इस तरह से सेट कर सकता हूं (अब ऐसा करने में आसान लगता है)। यहां मेरा समाधान है जो मेरे लिए काम करता है। ऊपर तर्ज पर

cd C:\your\directory\folder\with\the\javascript\and\java\files 

    javac -d . ClassSpy.java FileSearch.java HelloWorld.java Main.java Parameters.java Run.java 

    java -cp ./;C:\ABCAPI\bin\abcapi.jar hammer.main.Main gui=true input=JavaScriptStatus.js 

टिप्पणियाँ::

फिर संकलित करने के लिए भागो

  • जब संकलन आप -d . उपयोग कर सकते हैं आप संकुल है कि आप परिभाषित के रूप में अपने जावा फ़ाइलों अगर और यह उन्हें आपके पैकेज नाम के साथ फ़ोल्डर में रखेगा। यदि यह स्पष्ट नहीं है तो बस इस पोस्ट को देखें (मुझे कार्य बंद हो रहा है) How to compile packages in java?

  • एक और नोट यह है कि जब मैंने इसे चलाया तो मैंने कक्षा वर्ग के लिए दो चीजें जोड़ दीं -cp कक्षा पथ के लिए खड़ा है और उसके बाद कुछ भी इस वर्तमान रन के लिए आपके क्लास पथ में जोड़ा जाएगा। आप उन्हें अर्धविराम से अलग कर सकते हैं। ./ वर्तमान निर्देशिका को क्लास पथ में जोड़ता है और बाकी के बाद मैंने जोड़ा एपीआई की जार फ़ाइल का स्थान था।

  • hammer.main कक्षा मुख्य का पैकेज स्थान है जो कक्षा शुरू करने के लिए मेरा मुख्य कार्य है।

  • उसके बाद दो तर्क मेरे कार्यक्रम के लिए विशिष्ट हैं और आप जावास्क्रिप्ट फ़ाइल देख सकते हैं जिसे मैं जावा स्क्रिप्टइंजिन को पढ़ने और निष्पादित करने के लिए कहने जा रहा हूं। अब

    कि जार फ़ाइल वर्ग के रास्ते पर है और दृश्य हम चाहते हैं कि जार फ़ाइल के अंदर से एक पैकेज प्राप्त कर सकते हैं तो पैकेज से कक्षाएं फोन:

जार फ़ाइल जावास्क्रिप्ट के अंदर उपयोग करने के लिए । तो नीचे दिए गए उदाहरण के लिए abc.foo.pack.nameabcapi.jar के अंदर एक पैकेज है और मैं दो वर्गों का उपयोग कर रहा हूं ClassFromTheJarFile और AnotherClassFromTheJarFile उस पैकेज में हैं। मैं पैकेज को एक वैरिएबल में सेट करने की तकनीक का उपयोग कर रहा हूं, फिर उन वर्गों को उपसर्ग कर रहा हूं जिन्हें मैं पैकेज युक्त चर के साथ उपयोग करना चाहता हूं। एक और तरीका importPackage(com.foo.bar) कहना है, तो आपको हर बार कक्षाओं को उपसर्ग करना होगा, लेकिन यह तकनीक किसी कारण से मेरे लिए काम नहीं करती है (शायद मैंने कुछ गलत किया है)।निम्नलिखित कोड मेरे लिए ठीक काम करता है किसी भी दर पर,

myvariable = Packages.abc.foo.pack.name; 

    var foo = new myvariable.ClassFromTheJarFile("arg1","arg2"); 

    foo.doSomething(); 

    var fooSister = new myvariable.AnotherCLassFromTheJarFile("arg1"); 

    fooSister.doSomthingFromThisClass(); 

निष्कर्ष:

यह पता चला मेरी गलती इस तरह सीधे वर्ग आयात करने के लिए कोशिश कर रहा था,

myvariable = Packages.abc.foo.pack.name.ClassFromTheJarFile; 

तब मैं इसका उपयोग करने की कोशिश की,

var foo = new myvariable.ClassFromTheJarFile("arg1","arg2"); 

जो था काम नहीं कर रहा

मुझे उम्मीद है कि यह किसी की मदद करेगा क्योंकि मुझे बहुत सारी टिप्पणियां मिल रही हैं, "आप जानते हैं कि जावा और जावास्क्रिप्ट दो अलग-अलग चीजें हैं"। खैर हाँ मुझे पता है कि, तुम्हारा क्या मतलब है?

ध्यान रखें:

मैं एक ब्राउज़र में या इंटरनेट पर इस का उपयोग नहीं कर रहा हूँ। मैं जावा स्क्रिप्टइंजिन के माध्यम से इसका उपयोग कर रहा हूं। यदि आपको किसी URL से जार फ़ाइल प्राप्त करने की आवश्यकता है तो यह लिंक आपको http://mozilla-firefox-extension-dev.blogspot.com/2004/11/calling-java-code-in-custom-jars-from.html

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