【问题标题】:Graalvm unknown identifier when passing java object to js将java对象传递给js时Graalvm未知标识符
【发布时间】:2021-07-28 03:00:50
【问题描述】:

我正在尝试运行这个 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/

【问题讨论】:

    标签: java graalvm polyglot graaljs


    【解决方案1】:

    代码和堆栈跟踪不匹配,例如代码缺少tester 方法

        at ScriptEngine/org.homi.scripting.experimental.ScriptEngine.tester(ScriptEngine.java:43)
    

    当您指定allowAllAccess(true) 时,您允许所有访问,因此不再需要 HostAccess。

    问题中的代码适用于我并按预期打印 hello。

    【讨论】:

    • 抱歉,我的帖子中有错字,忘记编辑堆栈跟踪。问题最终不是在我的 module-info.java 中导出我的模块!我花了一段时间才找到。
    • 很高兴它得到了解决!有趣的是,模块不在代码/堆栈跟踪中的任何地方。我不会去想它,谢谢你的澄清,以后会努力记住的!
    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 2014-10-07
    • 2013-11-30
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多