本文介紹了JS腳本不能在Java 11上運行,但能在Java 8上運行的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有一個JS腳本,它在使用JDK 8運行時運行得很好,但在Java 11上失敗并出現錯誤。
錯誤為:
unknown call type GET:PROPERTY|ELEMENT|METHOD:NODE_PATH(Object)int@jdk.nashorn.internal.scripts.Script$Recompilation$20$11678$^eval\_
Java代碼:
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval(evalCode);
Invocable invocable = (Invocable) engine;
invocable.invokeFunction("__toCall");
腳本代碼:
function __toCall() {
return require('./src/main/resources/ontology/nashorn-invoker')(
function (require) {
print('in nashornInvoker: require=' + require);
var Text = function Text() {
StringLeaf.call(this);
};
Text.prototype.ontologyType = function () {
return 'cmd.ontology.types.Text';
};
var BasicTest = function BasicTest() {
var _field = new Text();
_field._fieldName = 'field';
_field._name = 'Field';
_field._defaultValue = '';
var curNode = this;
Structure.call(this, {
field: _field
});
};
BasicTest.prototype.ontologyType = function () {
return 'cmd.ontology.test.BasicTest';
};
BasicTest.prototype._name = 'Basic Test';
return (function () {
var model = [];
var callbackFn = function (result) {
if (result !== true) model.push.apply(model, result);
};
test.child('field').validate(vc, callbackFn);
var result = model.length === 0 ? true : model;
print('Callback function result: ' + JSON.stringify(result));
return result;
})();
}
);
}
推薦答案
這聽起來可能是JDK-8261926錯誤。好消息是,這個問題已經修復,但只在standalone Nashorn中修復,而不是集成到Java 11中的。還有一個page描述如何確保您的程序使用獨立的Nashorn,而不是Java 11上的集成Nashorn。
這篇關于JS腳本不能在Java 11上運行,但能在Java 8上運行的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,