我正在尝试使用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)发布于 2016-11-14 21:24:12
engine.eval(getJSReaderFromResorces("env.nashorn.1.2.js"));这个脚本似乎使用了名为"jdk.nashorn.internal.runtime.Context“的Nashorn内部类。这来自一个名为"jdk.nashorn.internal.runtime“的包。当您在安全管理器设置为on的情况下运行时,此包是受访问保护的,因此对脚本不可见。
在任何情况下,访问nashorn内部/implementation类都是一个好主意-因为对这些类没有兼容性保证。
在java 9中,这些包不是从nashorn模块导出的,因此无论安全管理器处于打开还是关闭状态,都将无法访问。
https://stackoverflow.com/questions/40541526
复制相似问题