San*_*ain 15 javascript java rhino
我试图从java代码调用java脚本函数.
这是我的Java代码
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();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的java脚本文件:
(function() {
alert("Hello World !!!");
})();
Run Code Online (Sandbox Code Playgroud)
但是当我运行驱动程序类的main方法时,它给出了如下错误:
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)
Run Code Online (Sandbox Code Playgroud)
我所知道的是它需要一些脚本引擎来执行它.
为此,我将rhino.jar文件添加到我的类路径中.但这不起作用.
我没有得到如何解决这个错误.请帮忙.谢谢.
T.J*_*der 32
alert不是JavaScript的一部分,它是windowWeb浏览器提供的对象的一部分.所以它不会在你试图使用它的上下文中.(这也是真实的setInterval,setTimeout和其他计时器相关的东西,仅供参考.)
如果您只想进行简单的控制台输出,Rhino会为print您的脚本提供一个函数,因此您可以替换alert为print.您的脚本也可以访问所有Java类等,因此例如java.lang.System.out.println('Hello');可以使用您的JavaScript脚本(尽管使用提供的print函数有点多余).您还可以通过以下方式轻松地为脚本提供Java变量ScriptEngine.put:
engine.put("out", System.out);
Run Code Online (Sandbox Code Playgroud)
...然后在你的脚本中:
out.println('Hello from JavaScript');
Run Code Online (Sandbox Code Playgroud)
...这是从脚本输出的第三种方式.:-)
看到的讨论中的javax.script包文件,特别是ScriptEngine#put,或者用于更复杂的情况,Bindings(和SimpleBindings)和ScriptContext.
| 归档时间: |
|
| 查看次数: |
32355 次 |
| 最近记录: |