Java ScriptingManager访问和使用函数

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

我正在研究Java的脚本支持,目前我有这个测试类

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");