getEngineByName(" nashorn")返回null

时间:2014-08-15 19:06:58

标签: java java-8 nashorn

无法获得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)

4 个答案:

答案 0 :(得分:16)

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

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

来自java docs

ScriptEngineManager(ClassLoader loader)

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

答案 1 :(得分:4)

老问题,但如果你没有任何快乐......你可以试试这个......

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

答案 2 :(得分:1)

Nashorn是Oracle库,所以如果你没有Oracle Java,那么你应该手动导入它。

How to make use of Nashorn

答案 3 :(得分:0)

此代码是正确的,可在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/