Nashorn抛出java.lang.RuntimeException:java.lang.ClassNotFoundException:jdk.nashorn.internal.runtime.Context.getContext

时间:2016-11-11 05:13:30

标签: java nashorn

我正在尝试在openjdk版本“1.8.0_91”中使用Nashorn。我的代码如下所示。

ScriptEngineManager manager = new ScriptEngineManager(null);
ScriptEngine engine = manager.getEngineByName("nashorn");
engine.eval(getJSReaderFromResorces("env.nashorn.1.2.js"));

它在最后一行抛出异常,如下所示。

Caused by: java.lang.ClassNotFoundException: jdk.nashorn.internal.runtime.Context.getContext
    at jdk.nashorn.internal.runtime.NativeJavaPackage.classNotFound(NativeJavaPackage.java:162)
    at jdk.nashorn.internal.scripts.Script$\^eval\_.:program(<eval>:1249)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:623)
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)

1 个答案:

答案 0 :(得分:0)

engine.eval(getJSReaderFromResorces("env.nashorn.1.2.js"));

看来这个脚本使用名为“jdk.nashorn.internal.runtime.Context”的Nashorn内部类。这是一个名为“jdk.nashorn.internal.runtime”的包。当您启用安全管理器运行时,此程序包受访问保护,因此脚本不可见。

在任何情况下,访问nashorn内部/实现类都是一个好主意 - 因为没有兼容性保证。

使用java 9,这些软件包不会从nashorn模块导出,因此无论安全管理器是否打开/关闭都无法访问。