JAVA8中使用Nashorn代替了之前版本JDK中的Rhino,使用上略有不同,目前遇到的有两处
1、控制台输出:
Rhino中代码为
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");
engine.put("msg", "Hi Script");
String str = "var user = {name:'ls',age:18,schools:['清华','北大']};";
str += "println(user.name);";
engine.eval(str);
可以正常运行。
但在JDK8中运行如上代码,会报如下错误
百度了类似问题,在Stack Overflow上有类似的问题,不过他使用的是alert,用的也是JDK7
,网址为http://stackoverflow.com/questions/11258888/referenceerror-alert-is-not-defined
改成print就正常了。
2、importPakage
Rhino中代码为
String jsCode = "importPackage(java.util); var list = Arrays.asList(\"aaa\",\"bbb\",\"ccc\");";
engine.eval(jsCode);
List<String> list = (List<String>) engine.get("list");
for (String ls : list) {
System.out.println(ls);
}
在JDK8中运行报错
同样在Stack OverFlow中有类似问题http://stackoverflow.com/questions/22502630/switching-from-rhino-to-nashorn,解决方法为加上一句engine.eval("load(\"nashorn:mozilla_compat.js\");");
具体原理还需要进一步研究了