2016-11-11 43 views
0

我想在openjdk版本「1.8.0_91」中使用Nashorn。我的代碼如下所示。Nashorn拋出java.lang.RuntimeException:java.lang.ClassNotFoundException:jdk.nashorn.internal.runtime.Context.getContext

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) 

回答

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

看來,這個腳本使用犀牛被稱爲 「jdk.nashorn.internal.runtime.Context」 內部類。這來自一個名爲「jdk.nashorn.internal.runtime」的包。當您在安全管理器設置下運行時,此軟件包受到訪問保護,因此對腳本不可見。

在任何情況下,訪問nashorn內部/實現類是一個好主意 - 因爲它們沒有兼容性保證。

使用java 9,這些軟件包不會從nashorn模塊導出,因此無論安全管理器開啓/關閉,都無法訪問這些軟件包。