getEngineByName(“nashorn”)返回null

无法获得Nashorn引擎

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); engine.eval("print('Hello World!');"); 

engine返回null

我正在使用eclipse,jdk1.8.0_11

java -version

java版“1.8.0_20-ea”

Java(TM)SE运行时环境(版本1.8.0_20-ea-b23)

当我将null参数传递给ScriptEngineManager构造函数时,它正在工作:

 ScriptEngine engine = new ScriptEngineManager(null).getEngineByName("nashorn"); engine.eval("print('Hello World!');"); 

来自java文档

ScriptEngineManager(ClassLoader加载器)

如果loader为null,则加载与平台捆绑在一起且位于通常扩展目录(已安装的扩展)中的脚本引擎工厂。

老问题,但万一你没有任何喜悦……你可以试试这个……

 ScriptEngine engine = new NashornScriptEngineFactory().getScriptEngine(); 

Nashorn是Oracle库,因此如果您没有Oracle Java,那么您应该手动导入它。

如何利用Nashorn

此代码是正确的,可在Oracle JDK和OpenJDK上运行。

 ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); 

您应该使用JDK 8的最新版本(您使用的“ea”版本现已过时且可能有错误)。

Nashorn的官方文档在这里: http : //docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/intro.html#sthref14

Nashorn是一个在这里举办的OpenJDK项目: http : //openjdk.java.net/projects/nashorn/