微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 GraalVM 而不是 Nashorn Engine 来使用 Jvascript 的 eval() 函数

如何解决使用 GraalVM 而不是 Nashorn Engine 来使用 Jvascript 的 eval() 函数

我正在使用 JFrame 制作计算器。我想使用javascript的eval()内置函数。我曾经使用 Nashorn 引擎来做到这一点。但是在进一步的谷歌搜索中,我发现它已从 JDK 15 中删除。我发现另一种选择是 GraalVM。但是如何将它用于 eval() 函数。我需要下载它才能使用吗? 就像在 Nashorn 中一样,我曾经导入一些东西,然后编写以下代码

try
                {
                    ScriptEngineManager manager = new ScriptEngineManager();
                    ScriptEngine engine = manager.getEngineByName("js");
                    ans=String.valueOf(engine.eval(str));
                }
                catch(ScriptException h)
                {
                    System.err.println("Error evaluating the script: " + h.getMessage());
                }

如何在 GraalVM 中做到这一点? 提前致谢??:-)

解决方法

如果您使用的是 GraalVM as your JDK,那么 GraalJS - GraalVM 的 Javascript 实现将自动在类路径上可用,您可以像以前一样将其与一系列导入语句一起使用。

例如,以下程序的工作方式如下:

import org.graalvm.polyglot.*;
import org.graalvm.polyglot.proxy.*;

public class HelloPolyglot {
    public static void main(String[] args) {
        System.out.println("Hello Java!");
        try (Context context = Context.create()) {
            context.eval("js","print('Hello JavaScript!');");
        }
    }
}
> javac HelloPolyglot.java
> java HelloPolyglot
Hello Java!
Hello JavaScript! 

这是推荐的使用方式,来自 GraalVM sdk 的多语言 API,并在 graalvm 上运行。

您还可以使用 ScriptEngine API:https://www.graalvm.org/reference-manual/js/ScriptEngine/

你也可以在任意 JDK 发行版上运行它,并将 GraalJS 用作一堆依赖项。下面是一个示例项目,您可以查看此路径:https://www.graalvm.org/reference-manual/js/RunOnJDK/,我不推荐这样做。 GraalVM 的 JIT 非常擅长在运行时对其进行优化,其他 JIT 没有那么好,因此性能可能会更差。

本文档在从 Nashorn 迁移时非常有用 - https://www.graalvm.org/reference-manual/js/ScriptEngine 通常没有复杂性,但可能存在一些关于并发等的极端情况。

,

你也可以继续在 Java 15 中使用 Nashorn;它不再随 JDK 一起提供,但可以作为 OpenJDK 组织内的独立项目使用,您可以简单地从 Maven Central 获取 JAR。见https://github.com/openjdk/nashorn#getting-started

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。