将 java 对象传递给 js 时 Graalvm 未知标识符
Graalvm unknown identifier when passing java object to js
我正在尝试 运行 这个 Graalvm 示例代码:
package org.homi.scripting.experimental;
import org.graalvm.polyglot.*;
import java.nio.file.*;
import static java.nio.file.StandardWatchEventKinds.*;
import java.io.File;
import java.io.IOException;
public class ScriptEngine {
public static class Name {
@HostAccess.Export public String name = "hello";
@HostAccess.Export
public String getName() {
return name;
}
}
public static void main(String[] args) {
Name n = new Name();
Context context = Context.newBuilder("js")
.allowAllAccess(true)
.allowIO(true)
.allowPolyglotAccess(PolyglotAccess.ALL)
.build();
context.getPolyglotBindings().putMember("name", n);
context.eval("js", "var name = Polyglot.import('name');");
context.eval("js", "console.log(name.getName())");
}
}
我遇到了这个异常:
Exception in thread "main" TypeError: invokeMember (getName) on org.homi.scripting.experimental.Name@2313052e failed due to: Unknown identifier: getName
at <js> :program(Unnamed:1:12-25)
at org.graalvm.sdk/org.graalvm.polyglot.Context.eval(Context.java:379)
at ScriptEngine/org.homi.scripting.experimental.ScriptEngine.tester(ScriptEngine.java:43)
at ScriptEngine/org.homi.scripting.experimental.ScriptEngine.main(ScriptEngine.java:29)
我是 graalvm 的新手,我做错了什么?我正在关注文档中的这个演示(请参阅主机互操作性部分):
https://www.graalvm.org/sdk/javadoc/
代码和堆栈跟踪不匹配,例如代码缺少 tester
方法
at ScriptEngine/org.homi.scripting.experimental.ScriptEngine.tester(ScriptEngine.java:43)
当您指定 allowAllAccess(true)
时,您允许所有访问,因此不再需要 HostAccess。
问题中的代码对我有效,并按预期打印 hello。
我正在尝试 运行 这个 Graalvm 示例代码:
package org.homi.scripting.experimental;
import org.graalvm.polyglot.*;
import java.nio.file.*;
import static java.nio.file.StandardWatchEventKinds.*;
import java.io.File;
import java.io.IOException;
public class ScriptEngine {
public static class Name {
@HostAccess.Export public String name = "hello";
@HostAccess.Export
public String getName() {
return name;
}
}
public static void main(String[] args) {
Name n = new Name();
Context context = Context.newBuilder("js")
.allowAllAccess(true)
.allowIO(true)
.allowPolyglotAccess(PolyglotAccess.ALL)
.build();
context.getPolyglotBindings().putMember("name", n);
context.eval("js", "var name = Polyglot.import('name');");
context.eval("js", "console.log(name.getName())");
}
}
我遇到了这个异常:
Exception in thread "main" TypeError: invokeMember (getName) on org.homi.scripting.experimental.Name@2313052e failed due to: Unknown identifier: getName
at <js> :program(Unnamed:1:12-25)
at org.graalvm.sdk/org.graalvm.polyglot.Context.eval(Context.java:379)
at ScriptEngine/org.homi.scripting.experimental.ScriptEngine.tester(ScriptEngine.java:43)
at ScriptEngine/org.homi.scripting.experimental.ScriptEngine.main(ScriptEngine.java:29)
我是 graalvm 的新手,我做错了什么?我正在关注文档中的这个演示(请参阅主机互操作性部分): https://www.graalvm.org/sdk/javadoc/
代码和堆栈跟踪不匹配,例如代码缺少 tester
方法
at ScriptEngine/org.homi.scripting.experimental.ScriptEngine.tester(ScriptEngine.java:43)
当您指定 allowAllAccess(true)
时,您允许所有访问,因此不再需要 HostAccess。
问题中的代码对我有效,并按预期打印 hello。