2015-04-27 28 views
0

在JavaScript中访问Java类时遇到问题。通过javax.script.ScriptEngine调用的代码片段无法访问在Rhino中运行的脚本中的java.lang.String

var String = Java.type("java.lang.String"); 

从Java,产量follwing错误

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,其中ab定义在javax.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

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

所以你行应可能看起来像

var String = Packages.java.lang.String; 
+0

显然,我在[犀牛语法]混合(https://wiki.openjdk.java.net/display/Nashorn/Rhino+Migration+Guide)。 – mike