【问题标题】:Cannot access java.lang.String in script run in Rhino无法访问在 Rhino 中运行的脚本中的 java.lang.String
【发布时间】:2015-04-27 13:45:09
【问题描述】:

我在 JavaScript 中访问 Java 类时遇到问题。调用代码sn -p

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

【问题讨论】:

    标签: java javascript string rhino


    【解决方案1】:

    我不知道你的Java.type 来自哪里,但official documentation 使用Packages.java 或只是java

    所以你的线应该看起来像

    var String = Packages.java.lang.String;
    

    【讨论】:

    猜你喜欢
    • 2020-11-20
    • 2015-08-26
    • 2017-08-07
    • 2020-09-30
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多