我最近把我的java版本从java 1.7升级到了java 1.8。在升级之后,我得到了这个错误。
原因: ECMAScript异常:类型错误:找不到ScriptObject和My Interface的通用类加载器。
我需要使用支持java 1.8和nashorn脚本引擎的哪个版本的wicket?另外,我是否需要配置任何与wicket脚本引擎相关的内容。
我已尝试添加此依赖项
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-nashorn</artifactId>
<version>7.4.0</version>
</dependency>ScriptEngineManager sem = ScriptEngineManager();引擎= sem.getEngineByName("nashorn");
但我还是遇到了同样的问题。
请帮我解决这个问题。
下面是我的方法
private final ScriptEngine engine;
ScriptEngineManager sem = new ScriptEngineManager();
engine = sem.getEngineByName("nashorn");
public <K> K getNewInterface(MyScript myScript){
ScriptContext ctx = new SimpleScriptContext();
String script = myScript.getScript();
if(Strings.isEmpty(script)) {markInvalid(myScript, "Script is empty", null); return null;}
script += " (function(){return this;})();";
Object thiz;
try{
thiz = engine.eval(script, ctx);
} catch (ScriptException e){
markInvalid(myScript, "Can't execute script", e);
return null;
}
if(thiz==null) {markInvalid(myScript, "Script executed, but context is null", null); return null;}
K ret = (K) ((Invocable)engine).getInterface(thiz, myScript.getScriptInterfaceClass());
if(ret==null) {
markInvalid(myScript, "Script executed, but it's incompatible with required interface", null);
return null;
}else{
myScript.setValid(true);
return ret;
}
}发布于 2016-11-23 01:25:48
Wicket不需要Nashorn您可以在Java 8中使用Wicket 1.5/6.x/7.x/8.x。
运行Wicket应用程序绝对不需要wicketstuff-nashorn。
如果没有实际的错误,我们很难知道它失败的原因。
更新:为什么使用new ScriptEngineManager(null),即null ClassLoader。最好使用new ScriptEngineManager(),它将使用上下文类加载器,它很可能知道这两个类。或者使用new ScriptEngineManager(YourInterface.class.getClassLoader())
https://stackoverflow.com/questions/40747901
复制相似问题