Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GraalVm-Java复杂对象can';不能像javascript对象那样解析_Javascript_Java_Graalvm - Fatal编程技术网

GraalVm-Java复杂对象can';不能像javascript对象那样解析

GraalVm-Java复杂对象can';不能像javascript对象那样解析,javascript,java,graalvm,Javascript,Java,Graalvm,我正在尝试从nashorn迁移到graalvm(Java11)。我有很多java脚本。 Description->以maven libs org.graalvm.js连接到java项目:graal sdk,js,js scriptengine,org.graalvm.truffle:truffle api。版本1.0.0-rc9。创建的脚本引擎类似于“new ScriptEngineManager().getEngineByName(“graal.js”)”然后您可以在map中创建数组中的map

我正在尝试从nashorn迁移到graalvm(Java11)。我有很多java脚本。

Description->以maven libs org.graalvm.js连接到java项目:graal sdk,js,js scriptengine,org.graalvm.truffle:truffle api。版本1.0.0-rc9。
创建的脚本引擎类似于“new ScriptEngineManager().getEngineByName(“graal.js”)”
然后您可以在map中创建数组中的map,如:

Map mapOuter = new HashMap();
Map mapInner = new HashMap();
List arrayInner = new ArrayList();

mapInner.put("1", 3);
arrayInner.add(mapInner);
mapOuter.put("2", arrayInner);
function test(param) {
     print(param["2"]);
     param["2"].forEach(function(inArray){
       print(inArray);
     });
}
然后将mapOuter转换为类似ProxyObject.fromMap(mapOuter)的ProxyObject
使用如下代码评估测试javascript:

Map mapOuter = new HashMap();
Map mapInner = new HashMap();
List arrayInner = new ArrayList();

mapInner.put("1", 3);
arrayInner.add(mapInner);
mapOuter.put("2", arrayInner);
function test(param) {
     print(param["2"]);
     param["2"].forEach(function(inArray){
       print(inArray);
     });
}
这将调用错误,如:

javax.script.ScriptException:org.graalvm.polyglot.PolyglotException:TypeError:调用外部对象失败,原因是:消息不受支持:INVOKE

所以问题是:如何使graalvm正确地将复杂的java对象转换为javascript函数

p、 在这个例子中,我想要调用对象,比如:

打印(参数[“2”][0][“1”])

它会把我打印3张。

我的尝试:
试图将outerMap的每个成员解析为ProxyObject/ProxyArray。

什么在起作用 如果您更改javascript,如:

打印(参数[“2”][0]。获取(“1”)

它将打印3个

目前(2018年12月)不支持使用
[]
访问Java映射的值。您需要将映射转换为
ProxyObject
,才能使
[]
正常工作。就像您对
maputer
对象所做的那样


否则,它是一个普通的Java映射,在该映射上调用
.get(key)
来获取值

我使用了ProxyObject,但它不起作用。我还尝试使用[ProxyObject in ProxyArray in ProxyObject]构造,但它不起作用。如果我按照以下要点这样做,它对我有效:。请您详细说明这个问题或提供一个更好的代码示例好吗?谢谢,它成功了,但还有另一个问题->“java.lang.IllegalStateException:线程[]请求的多线程访问,但语言js不允许”这样的错误在每次运行时调用alsmot。有办法解决吗?在您的示例中,您使用的是ArrayList,因此当我尝试使用javascript数组push()方法时,它会导致错误“javax.script.ScriptException:org.graalvm.polyglot.PolyglotException:TypeError:INVOKE on JavaObject(java.util.ArrayList)]失败,原因是:未知标识符:push”