You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse中OpenJDK17调用ScriptEngineManager获取js引擎返回NULL的问题

问题分析与修复方案:ScriptEngine为null导致NullPointerException

问题原因

  1. OpenJDK 17移除Nashorn引擎:从Java 11开始,Nashorn JavaScript引擎被标记为废弃,Java 17直接将其从JDK核心包中移除。代码里通过manager.getEngineByName("js")获取的正是Nashorn引擎,在纯OpenJDK 17环境下会返回null,后续调用engine.eval()自然触发NullPointerException。
  2. VS Code运行正常的原因:大概率是VS Code使用的JDK版本(如JDK 8/11)仍内置Nashorn引擎,或者运行时自动引入了替代的JavaScript引擎依赖。

修复方案

方案1:引入GraalVM JavaScript引擎(推荐)

GraalVM提供的JavaScript引擎是Nashorn的官方替代方案,性能更高且兼容Java 17。

  • 添加Maven依赖:
<dependencies>
    <dependency>
        <groupId>org.graalvm.sdk</groupId>
        <artifactId>graal-sdk</artifactId>
        <version>22.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.graalvm.js</groupId>
        <artifactId>js</artifactId>
        <version>22.3.2</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.graalvm.js</groupId>
        <artifactId>js-scriptengine</artifactId>
        <version>22.3.2</version>
    </dependency>
</dependencies>
  • 修改引擎获取代码:
    将ScriptEngine engine = manager.getEngineByName("js");替换为:
// 使用GraalVM引擎名称获取
ScriptEngine engine = manager.getEngineByName("graal.js");
// 或通过扩展名获取,兼容性更强
// ScriptEngine engine = manager.getEngineByExtension("js");

方案2:手动引入Nashorn引擎

如果必须沿用Nashorn,可以单独引入其独立包:

  • 添加Maven依赖:
<dependency>
    <groupId>org.openjdk.nashorn</groupId>
    <artifactId>nashorn-core</artifactId>
    <version>15.4</version>
</dependency>
  • 代码无需修改引擎名称,getEngineByName("js")即可正常获取Nashorn引擎。

额外潜在问题修复

代码中gen方法存在索引越界风险:当n大于运算符集合大小+1时,i会超出operators的索引范围(比如n=5时,operators仅4个元素,i会到4,调用operators.get(i)会抛出IndexOutOfBoundsException)。可修改为循环使用运算符:

private static String gen(int n, ArrayList<Character> operators, String ret, int i) {
    ret += n ;
    if(n > 1) {
        // 循环取运算符,避免索引越界
        ret += operators.get(i % operators.size());
        ret = gen(n - 1, operators, ret, i + 1) ;
    }
    return ret;
}

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:31:06