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

使用Java Nashorn加载JS文件时触发NullPointerException求助

问题分析与解决

核心原因

你的代码中ScriptEngine ee = new ScriptEngineManager().getEngineByName("Nashorn")返回了null,导致调用ee.eval()时抛出空指针异常。这是因为JDK 11及更高版本(包括你使用的JDK 21)已经移除了内置的Nashorn JavaScript引擎,所以ScriptEngineManager找不到对应的引擎实例。

解决方案

方案1:切换到低版本JDK

如果不需要使用JDK21的新特性,可以将项目的JDK版本切换到JDK 8或JDK 10(这两个版本仍内置Nashorn引擎),无需修改代码即可正常运行。

方案2:在JDK21中手动引入Nashorn依赖

若坚持使用JDK21,需要添加独立的Nashorn库依赖:

  • 如果使用Maven,在pom.xml中添加:
<dependency>
    <groupId>org.openjdk.nashorn</groupId>
    <artifactId>nashorn-core</artifactId>
    <version>15.4</version> <!-- 使用最新稳定版本 -->
</dependency>
  • 如果使用Gradle,在build.gradle中添加:
implementation 'org.openjdk.nashorn:nashorn-core:15.4'

添加依赖后,修改代码以正确加载引擎:

import javax.script.*;
import java.io.*;
import org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory;

public class interpreter {
    public static void main(String[] args) throws Exception{
        // 手动创建Nashorn引擎实例
        ScriptEngine ee = new NashornScriptEngineFactory().getScriptEngine();
        ee.eval(new FileReader("C:/Users/aryan/OneDrive/Documents/Github/prometheus-ide/src/holyc-interpreter.js"));
    }
}

额外建议

避免硬编码文件绝对路径,可通过类加载器获取资源文件,提升代码可移植性:

// 从类路径中读取JS文件(需确保holyc-interpreter.js被打包到classpath中)
InputStream is = interpreter.class.getResourceAsStream("/holyc-interpreter.js");
ee.eval(new InputStreamReader(is));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:32:45