gpt4 book ai didi

Java ScriptingManager 访问和使用函数

转载 作者:行者123 更新时间:2023-11-29 08:57:12 25 4
gpt4 key购买 nike

我正在研究 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");

当我尝试运行它时,我得到了

run: Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "makeObject" is not defined. (#1) in at line number 1 at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:224) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:249) at main.main(main.java:34) Caused by: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "makeObject" is not defined. (#1) at sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3771) at sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3749) at sun.org.mozilla.javascript.internal.ScriptRuntime.notFoundError(ScriptRuntime.java:3834) at sun.org.mozilla.javascript.internal.ScriptRuntime.getNameFunctionAndThis(ScriptRuntime.java:2219) at sun.org.mozilla.javascript.internal.Interpreter.interpretLoop(Interpreter.java:1510) at sun.org.mozilla.javascript.internal.Interpreter.interpret(Interpreter.java:849) at sun.org.mozilla.javascript.internal.InterpretedFunction.call(InterpretedFunction.java:162) at sun.org.mozilla.javascript.internal.ContextFactory.doTopCall(ContextFactory.java:429) at com.sun.script.javascript.RhinoScriptEngine$1.superDoTopCall(RhinoScriptEngine.java:116) at com.sun.script.javascript.RhinoScriptEngine$1.doTopCall(RhinoScriptEngine.java:109) at sun.org.mozilla.javascript.internal.ScriptRuntime.doTopCall(ScriptRuntime.java:3161) at sun.org.mozilla.javascript.internal.InterpretedFunction.exec(InterpretedFunction.java:173) at sun.org.mozilla.javascript.internal.Context.evaluateReader(Context.java:1159) at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:214) ... 2 more Java Result: 1 BUILD SUCCESSFUL (total time: 3 seconds)

我该如何修复它以便我可以在脚本中使用 makeObject 函数???

最佳答案

您需要添加绑定(bind),例如将您的 Java 对象链接到 JS 范围。

Java:

import javax.script.*;
import java.io.FileNotFoundException;

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

//bind main instance
Bindings bindings = engine.createBindings();
bindings.put("main", new main());
engine.setBindings(bindings, ScriptContext.GLOBAL_SCOPE);

// evaluate JavaScript code from given file - specified by first argument
engine.eval(new java.io.FileReader("l.js"));

}

public void makeObject(String s) {
System.out.println(s);
}
}

在 JS 中你引用这个 main 对象:

main.makeObject("afzsdf");

关于Java ScriptingManager 访问和使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19622739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com