【问题标题】:allow javascript to control some environmental things允许javascript控制一些环境的东西
【发布时间】:2019-01-26 15:03:03
【问题描述】:

我想使用 GraalVM 运行用户编写的 javascript 代码(我正在编写一个 Java 11 项目)。

我可以给 javascript 文件提供 Java 对象吗,在 javascript 中我想写类似的东西

shrek.shedLayer();

当我的 Java 程序执行这条语句时,它就相当于它(java 程序)直接运行了

someLong.pieceOf().Code();
Maybe multipleLines = new Maybe();
someLong.add(multipleLines);

或其他。

【问题讨论】:

    标签: javascript java java-11 graalvm


    【解决方案1】:

    是的,您可以让您的 Java 代码评估 JavaScript。是的,您可以将 Java 对象传递给 JavaScript 上下文。是的,您可以将 JavaScript 值返回到 Java。

    Here's 实例化 JavaScript 上下文的 Java 代码示例,计算定义函数的 JavaScript 代码字符串,将此函数存储在变量中,调用它并将 Java 对象作为参数传递并打印此函数的返回值函数调用。

    import org.graalvm.polyglot.*;
    
    import java.io.File;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.util.stream.Stream;
    
    public class ExtListDir {
        public static void main(String[] args) throws java.io.IOException {
            final Context context = Context.create("js");
            String s = "name + ': ' + size";
            if (args.length == 1) {
                s = args[0];
            }
            final Value lambda = context.eval("js",
                "(function(name, size) { return " + s + "})");
            try (Stream<Path> paths = Files.walk(Paths.get("."))) {
                paths.filter(Files::isRegularFile).forEach((Path p) -> {
                    File f = p.toFile();
                    Value v = lambda.execute(f.getName(), f.length());
                    System.out.println(v);
                });
            }
        }
    }
    

    如果你想在 JS 上下文中使用 Java 类,你可以用Java.type() 引用它们,例如这里是JS snippet which uses Java's BigInteger

    const BigInteger = Java.type('java.math.BigInteger');
    var text = BigInteger.valueOf(10).pow(100)
              .add(BigInteger.valueOf(43)).toString();
    

    【讨论】:

    • 但是那里没有 JavaScript 控制 Java 环境的例子
    • 我不是 100% 确定您所说的“JavaScript 控制 Java 环境”是什么意思,但是如果您想从 JavaScript 创建多个 Java 上下文,那么它目前不能这样工作。我添加了一个 sn-p 来展示如何从 JavaScript 访问 Java 类。
    猜你喜欢
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 2014-11-06
    相关资源
    最近更新 更多