是否可以从ScriptEngineManager内部访问Java方法。
我发现了如何使用Invocable调用函数方法,但现在我需要相反的事情发生。
public class Main {
public static void main (String[] args) throws Exception {
String source = "var results = system.foo('example'); \n" +
" \n" +
"if(results == \"hello\") { \n" +
" print(\"ding dong.\"); \n" +
"} \n";
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
engine.eval(source);
}
}
public class System {
public static String foo (String x) throws Exception {
// do something with x
return("hello");
}
}
因此,当我运行system.foo时,它应该在System.foo中运行该方法。
答案 0 :(得分:0)
使用Mozilla Rhino执行此操作要容易得多。假设您希望将System.out
公开给您的脚本:
Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects();
Object wrappedOut = Context.javaToJS(System.out, scope);
ScriptableObject.putProperty(scope, "out", wrappedOut);
然后在JavaScript中:
var hello = "Hello World";
out.println(hello);
您还可以通过扩展Rhino库中的Function类来公开单个Java方法,并以类似的方式将它公开给您的脚本。