2012-06-29 30 views
12

मैं जावा कोड से जावा स्क्रिप्ट फ़ंक्शन को कॉल करने का प्रयास कर रहा हूं।संदर्भ त्रुटि: "चेतावनी" को परिभाषित नहीं किया गया है

यहाँ मेरी जावा कोड

public static void main(String[] args) throws FileNotFoundException { 
    try { 
     /** 
     * To call a anonymous function from java script file 
     */ 
     ScriptEngine engine = new ScriptEngineManager() 
       .getEngineByName("javascript"); 
     FileReader fr = new FileReader("src/js/MySpec.js"); 
     engine.eval(fr); 

    } catch (ScriptException scrEx) { 
     scrEx.printStackTrace(); 
    } 
} 

यहाँ है मेरी जावा स्क्रिप्ट फ़ाइल:

(function() { 
    alert("Hello World !!!"); 
})(); 

लेकिन जब मैं ड्राइवर वर्ग के मुख्य विधि चलाने यह मेरे नीचे के रूप में त्रुटि दे रहा है:

Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "alert" is not defined. (<Unknown source>#2) in <Unknown source> at line number 2 
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:110) 
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:232) 
at Java6RhinoRunner.load(Java6RhinoRunner.java:42) 
at Java6RhinoRunner.main(Java6RhinoRunner.java:12) 

मुझे क्या पता है कि इसे निष्पादित करने के लिए कुछ स्क्रिप्ट इंजन की आवश्यकता है।

इसके लिए मैंने अपने वर्ग पथ में rhino.jar फ़ाइल को जोड़ा। लेकिन यह काम नहीं कर रहा है।

मुझे इस त्रुटि को हल करने का तरीका नहीं मिल रहा है। कृपया मदद करें। अग्रिम धन्यवाद।

उत्तर

27

alert जावास्क्रिप्ट का हिस्सा नहीं है, यह वेब ब्राउज़र द्वारा प्रदत्त window ऑब्जेक्ट का हिस्सा है। तो यह संदर्भ आप में इसका इस्तेमाल करने की कोशिश कर रहे हैं में मौजूद नहीं है। (यह भी setInterval, setTimeout, और अन्य टाइमर से संबंधित सामान का सच है, FYI करें।)

तुम सिर्फ सरल कंसोल करना चाहते हैं तो आउटपुट, राइनो आपकी स्क्रिप्ट पर print फ़ंक्शन प्रदान करता है, ताकि आप को print से प्रतिस्थापित कर सकें। आपकी स्क्रिप्ट के पास सभी जावा क्लासेस तक पहुंच है और इसलिए, उदाहरण के लिए java.lang.System.out.println('Hello'); आपकी जावास्क्रिप्ट स्क्रिप्ट से काम करेगा (हालांकि यह प्रदत्त print फ़ंक्शन के साथ थोड़ा अनावश्यक है)। तुम भी ScriptEngine.put माध्यम से आसानी से अपनी स्क्रिप्ट के लिए जावा चर उपलब्ध करा सकते हैं, जैसे:

engine.put("out", System.out); 

... और फिर अपनी स्क्रिप्ट में:

out.println('Hello from JavaScript'); 

... ताकि उत्पादन करने के लिए एक तीसरा रास्ता है लिपि से। :-)

चर्चा the javax.script package documentation में, अधिक जटिल मामलों के लिए, Bindings (और SimpleBindings) और ScriptContext देखें विशेष ScriptEngine#put में, या।

+1

NodeJS जैसे कुछ का उपयोग करने की तरह, आप कोड निष्पादित कर सकते हैं लेकिन चूंकि आप ब्राउज़र में नहीं चल रहे हैं, इसलिए आपको ब्राउज़र के लाभ जैसे कि अलर्ट बॉक्स का लाभ नहीं हो सकता है। –

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