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

如何在Java 17中使用外部OpenJDK Nashorn引擎?

在Java 15+中使用外部OpenJDK Nashorn引擎

1. 添加Maven依赖

在项目的pom.xml中引入Nashorn核心依赖:

<dependency>
    <groupId>org.openjdk.nashorn</groupId>
    <artifactId>nashorn-core</artifactId>
    <version>15.0</version>
</dependency>

2. 代码示例

示例1:基本执行JavaScript代码

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class NashornBasicExample {
    public static void main(String[] args) throws ScriptException {
        // 获取Nashorn脚本引擎
        ScriptEngineManager engineManager = new ScriptEngineManager();
        ScriptEngine nashornEngine = engineManager.getEngineByName("nashorn");

        // 执行简单的JavaScript代码
        String jsCode = "var message = 'Hello from Nashorn!'; message;";
        Object result = nashornEngine.eval(jsCode);
        System.out.println(result); // 输出: Hello from Nashorn!
    }
}

示例2:在JavaScript中调用Java类与方法

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class NashornJavaInteropExample {
    public static void main(String[] args) throws ScriptException {
        ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("nashorn");

        // 在JS中调用Java静态方法
        String jsCode = "Java.type('java.lang.Math').sqrt(16);";
        Double sqrtResult = (Double) nashornEngine.eval(jsCode);
        System.out.println("Square root of 16: " + sqrtResult); // 输出: 4.0

        // 在JS中实例化Java对象并调用方法
        jsCode = "var arrayList = new Java.type('java.util.ArrayList')(); arrayList.add('Test'); arrayList.size();";
        Integer size = (Integer) nashornEngine.eval(jsCode);
        System.out.println("ArrayList size: " + size); // 输出: 1
    }
}

示例3:向JavaScript环境传递Java对象参数

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class NashornPassObjectExample {
    public static void main(String[] args) throws ScriptException {
        ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("nashorn");

        // 向JS引擎绑定Java对象
        String javaMessage = "Message from Java";
        nashornEngine.put("javaMsg", javaMessage);

        // 在JS中使用绑定的Java对象
        String jsCode = "console.log('Received from Java: ' + javaMsg); 'Processed in JS';";
        Object processedResult = nashornEngine.eval(jsCode);
        System.out.println(processedResult); // 输出: Processed in JS
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:40:56