虽然试图将运行Rhino引擎的旧代码移植到Java 8中的Nashorn,但遇到了麻烦,静态属性/方法无法从运行js脚本访问。如果我使用犀牛,它运行完美。我不知道实施新的Nashorn发动机会发生什么。从Nashorn引擎中的js代码访问静态Java变量
import javax.script.*;
public class StaticVars {
public static String myname = "John\n";
public static void main(String[] args) {
try{
ScriptEngine engine;
ScriptEngineManager manager = new ScriptEngineManager();
engine=System.getProperty("java.version").startsWith("1.8")?
manager.getEngineByName("Nashorn") : //j1.8_u51
manager.getEngineByName("JavaScript"); //j1.7
engine.put("staticvars", new StaticVars());
engine.eval("print(staticvars.myname);");
//print "John" if ran with java 7
//print "undefined" if ran with java 8
} catch(Exception e){e.printStackTrace();}
}
}
它的工作原理!只需要对代码进行一些更改。顺便说一句,这些方法不向后兼容Rhino.Thanks! – truongdao