Java ScriptingManager访问和使用函数
我正在研究Java的脚本支持,目前我有这个测试类Java ScriptingManager访问和使用函数,java,javascript,scripting,Java,Javascript,Scripting,我正在研究Java的脚本支持,目前我有这个测试类 import java.io.FileNotFoundException; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; /** * * @author Makerimages */ public c
import java.io.FileNotFoundException;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
/**
*
* @author Makerimages
*/
public class main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws ScriptException, FileNotFoundException, NoSuchMethodException {
// create a script engine manager
ScriptEngineManager factory = new ScriptEngineManager();
// create JavaScript engine
ScriptEngine engine = factory.getEngineByName("JavaScript");
// evaluate JavaScript code from given file - specified by first argument
engine.eval(new java.io.FileReader("C:/Users/**/Documents/NetBeansProjects/test/src/l.js"));
}
public void makeObject(String s)
{
System.out.println(s);
}
}
还有这个l.js文件
makeObject("afzsdf");
当我试着运行这个时,我得到了
运行:
线程“main”javax.script.ScriptException中的异常:sun.org.mozilla.javascript.internal.EcmaError:ReferenceError:“makeObject”未定义。(#1)在第1行
位于com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:224)
位于javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:249)
main.main(main.java:34)
原因:sun.org.mozilla.javascript.internal.EcmaError:ReferenceError:未定义“makeObject”。(#1)
位于sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3771)
位于sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3749)
位于sun.org.mozilla.javascript.internal.ScriptRuntime.notFoundError(ScriptRuntime.java:3834)
位于sun.org.mozilla.javascript.internal.ScriptRuntime.getNameFunctionAndThis(ScriptRuntime.java:2219)
位于sun.org.mozilla.javascript.internal.Interpreter.interpreterloop(Interpreter.java:1510)
位于sun.org.mozilla.javascript.internal.Interpreter.interprefer(Interpreter.java:849)
在sun.org.mozilla.javascript.internal.transportedFunction.call(transportedFunction.java:162)上
位于sun.org.mozilla.javascript.internal.ContextFactory.doTopCall(ContextFactory.java:429)
位于com.sun.script.javascript.RhinoScriptEngine$1.superDoTopCall(RhinoScriptEngine.java:116)
位于com.sun.script.javascript.RhinoScriptEngine$1.doTopCall(RhinoScriptEngine.java:109)
位于sun.org.mozilla.javascript.internal.ScriptRuntime.doTopCall(ScriptRuntime.java:3161)
位于sun.org.mozilla.javascript.internal.transportedfunction.exec(transportedfunction.java:173)
位于sun.org.mozilla.javascript.internal.Context.evaluateReader(Context.java:1159)
位于com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:214)
... 还有两个
Java结果:1
生成成功(总时间:3秒)
如何修复它以便在脚本中使用makeObject函数?您需要添加绑定,例如将Java对象链接到JS范围 爪哇: 在JS中,您引用此
main
对象:
main.makeObject("afzsdf");
你看过文件了吗?布莱利安!创造奇迹!但是,是否有一种方法可以评估整个文件夹中的.js文件,以及该文件夹的子文件夹?不客气!我不认为有这样的方法——只需按正确的顺序迭代文件并编译它们。如果你有困难,请随时在SO询问。
main.makeObject("afzsdf");