无法在 Rhino 的脚本 运行 中访问 java.lang.String
Cannot access java.lang.String in script run in Rhino
我在 Java 脚本中访问 Java classes 时遇到问题。调用代码片段
var String = Java.type("java.lang.String");
从 Java 通过 javax.script.ScriptEngine
,产生以下错误
Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "Java" is not defined. (path/to/string.js#1) in path/to/string.js at line number 1
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:156)
at main.JsTest.main(JsTest.java:55)
在脚本中使用非 Java classes 可以正常工作,例如var value = a + b
,其中 a
和 b
定义在 javax.script.ScriptContext
.
这是执行脚本的Javaclass。
JsTest.java
public class JsTest
{
public static void main(String[] args) throws Exception
{
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine se = sem.getEngineByExtension("js");
String script = "path/to/string.js";
File scriptFile = new File(script);
FileReader fr = new FileReader(scriptFile);
se.put(ScriptEngine.FILENAME, script);
ScriptContext sc = new SimpleScriptContext();
se.eval(fr, sc);
}
}
我不知道你的 Java.type
来自哪里,但是 official documentation 使用 Packages.java
或者只是 java
.
所以你的台词应该看起来像
var String = Packages.java.lang.String;
我在 Java 脚本中访问 Java classes 时遇到问题。调用代码片段
var String = Java.type("java.lang.String");
从 Java 通过 javax.script.ScriptEngine
,产生以下错误
Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "Java" is not defined. (path/to/string.js#1) in path/to/string.js at line number 1
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:156)
at main.JsTest.main(JsTest.java:55)
在脚本中使用非 Java classes 可以正常工作,例如var value = a + b
,其中 a
和 b
定义在 javax.script.ScriptContext
.
这是执行脚本的Javaclass。
JsTest.java
public class JsTest
{
public static void main(String[] args) throws Exception
{
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine se = sem.getEngineByExtension("js");
String script = "path/to/string.js";
File scriptFile = new File(script);
FileReader fr = new FileReader(scriptFile);
se.put(ScriptEngine.FILENAME, script);
ScriptContext sc = new SimpleScriptContext();
se.eval(fr, sc);
}
}
我不知道你的 Java.type
来自哪里,但是 official documentation 使用 Packages.java
或者只是 java
.
所以你的台词应该看起来像
var String = Packages.java.lang.String;