0

この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/

4

1 に答える 1

0

コードとスタック トレースが一致しません。たとえば、コードにtesterメソッドがありません。

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

すべてのアクセスを許可するように指定するallowAllAccess(true)と、HostAccess は必要なくなります。

質問のコードは私にとってはうまくいき、期待どおりに hello を出力します。

于 2021-05-07T11:53:31.350 に答える