无法在Rhino中运行的脚本中访问java.lang.String

时间:2015-04-27 13:45:09

标签: java javascript string rhino

我在使用JavaScript访问Java类时遇到问题。调用代码段

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类可以正常工作,例如var value = a + b,其中abjavax.script.ScriptContext中定义。

这是执行脚本的Java类。

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

1 个答案:

答案 0 :(得分:2)

我不知道您的Java.type来自何处,但official documentation使用Packages.javajava

所以你的行应该看起来像

var String = Packages.java.lang.String;