JS脚本不能在Java 11上运行,但能在Java 8上运行

JS script doesn#39;t run with Java 11 but works with Java 8(JS脚本不能在Java 11上运行,但能在Java 8上运行)

本文介绍了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上运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:JS脚本不能在Java 11上运行,但能在Java 8上运行