jdk17 你还想用ScriptEngineManager来执行js代码?

今天要用java来执行配置表的js代码,用 ScriptEngine javaScriptEngine = new ScriptEngineManager().getEngineByName(“javascript”);
一直抛异常:Cannot invoke “javax.script.ScriptEngine.eval(String)” because “javaScriptEngine” is null
网上找了半天,都不能解决,后来查了官网说是 Nashorn 引擎jdk17被移除了,然后又查了替代方案,找到了下面的解决方式。

以下方式本人亲测:
在 JDK 17 中,JDK 不再默认提供 JavaScript 引擎,而是移除了 Nashorn 引擎。但你可以使用第三方的 JavaScript 引擎,比如 GraalVM 提供的 Graal.js 引擎。

以下是在 JDK 17 中使用 Graal.js 引擎执行 JavaScript 的基本步骤:

  1. 添加 Graal.js 依赖:首先,在你的 Maven 项目中添加 Graal.js 的依赖。可以在 Maven 中央仓库找到 Graal.js 的依赖,并将其添加到你的 pom.xml 文件中。
<dependency><groupId>org.graalvm.js</groupId><artifactId>js</artifactId><version>21.0.0</version>
</dependency>
  1. 使用 Graal.js 引擎执行 JavaScript:编写 Java 代码,使用 Graal.js 引擎执行 JavaScript。以下是一个简单的示例:
import org.graalvm.polyglot.*;public class Main {public static void main(String[] args) {try (Context context = Context.create()) {Value result = context.eval("js", "1 + 2");System.out.println(result.asInt());}}
}

在这个示例中,我们创建了一个 Graal.js 上下文对象,并使用 eval() 方法执行了一个简单的 JavaScript 表达式,计算了 1 加 2 的结果。
在这里插入图片描述
比之前用ScriptEngineManager简洁了很多!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/615386.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5.Hexo为页面标记标签和类别

Hexo的标签和类别基本上是可以在Hexo中将内容分组的两种方式 如果在网站上有一堆内容&#xff0c;有不同的博客文章 将博客文章分类为不同的类别会很有帮助 用特定的关键词为博客文章标记 如果可以同时分类和标记页面&#xff0c;会使网站用户更轻松地找到他们想要的页面类型 …

文章分享:《二代测序临床报告解读指引》

&#xff3b;摘要&#xff3d; 二代测序&#xff08;next generation sequencing&#xff0c;NGS&#xff09;已成为中国临床肿瘤医生常用检测工具&#xff0c;而中国超 90%临床医生需要 NGS 报告解读支持。因此&#xff0c;为提升临床医生 NGS 报告解读能力&#xff0c;特编写…

Traefik的EntryPoints是什么?

在探索 Traefik —— 这款极受欢迎的现代反向代理和负载均衡器时&#xff0c;理解其核心组件是非常重要的。其中&#xff0c;EntryPoints 是 Traefik 中一个关键概念&#xff0c;它直接关系到如何接收和处理进入的网络流量。&#x1f511;&#x1f6a6; 1. Traefik 的 EntryPo…

蓝桥杯基础18——第13届省赛真题与代码详解

目录 0.心得体会 1.题目如下 2.代码实现的思路 键值扫描 数码管窗口切换 数码管的动态扫描 继电器工作时L3闪烁&#xff0c;整点时刻L1灯光亮5秒 3.变量列表 定义的常量和数组 功能控制和状态变量 定时器和计数变量 4.代码参考 4.1 头文件 onewire.h ds1302.h 4…

react使用npm i @reduxjs/toolkit react-redux

npm i reduxjs/toolkit react-redux 创建一个 store文件夹&#xff0c;里面创建index.js文件和子模块文件夹 index,js文件写入以下代码 import {configureStore} from reduxjs/toolkit // 导入子模块 import counterReducer from ./modules/one import two from ./modules/tw…

Acwing.1375 奶牛回家(最短路朴素dijkstra)

题目 晚餐时间马上就到了&#xff0c;奶牛们还在各自的牧场中悠闲的散着步。 当农夫约翰摇动铃铛&#xff0c;这些牛就要赶回牛棚去吃晚餐。 在吃晚餐之前&#xff0c;所有奶牛都在自己的牧场之中&#xff0c;有些牧场中可能没有奶牛。 每个牧场都通过一条条道路连接到一个…

蓝桥杯【第15届省赛】Python B组

这题目难度对比历届是相当炸裂的简单了…… A&#xff1a;穿越时空之门 【问题描述】 随着 2024 年的钟声回荡&#xff0c;传说中的时空之门再次敞开。这扇门是一条神秘的通道&#xff0c;它连接着二进制和四进制两个不同的数码领域&#xff0c;等待着勇者们的探索。 在二进制…

一些知识点小细节

当遇到的问题有关逆序输出&#xff0c;可以转换一下思想&#xff0c;就是使用for循环的时候&#xff0c;i的初始化是从数组或者是字符串的最后一个&#xff0c;然后注意设置循环结束的条件&#xff0c;最重要的是不要忘记i--;而不是I&#xff1b; 注意&#xff1a;当要逆序输出…

Day 39:动态规划 LeedCode 62.不同路径 63. 不同路径 II

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#…

Suno AI

Suno is the latest big name in AI, but what is it? Keep reading to learn everything you need to know about Suno AI, including what it is, what it can do, and how much it costs. Suno AI是一款由Anthropic公司开发的人工智能音乐生成器&#xff0c;它利用先进…

在 Vue 3 中如何利用 TypeScript 进行类型检查和类型推断?

在 Vue 3 中&#xff0c;TypeScript 的集成得到了显著的改进&#xff0c;使得开发者可以更加便捷地进行类型检查和类型推断。以下是一些在 Vue 3 中利用 TypeScript 进行类型检查和类型推断的方法&#xff1a; 使用 <script setup> 语法&#xff1a;<script setup>…

Android适配平板屏幕尺寸

一、划分手机和平板 人为判断方法: 大于6英寸的就是平板。小于6英寸的都是手机 平板尺寸&#xff1a; 6英寸、7英寸、10英寸、14英寸… Android系统支持多配置资源文件&#xff0c;我们可以追加新的资源目录到你的Android项目中。命名规范&#xff1a; 资源名字-限制符 l…