当前位置:首页 > Java

java如何调用js

2026-04-09 07:32:44Java

调用 JavaScript 的几种方法

在 Java 中调用 JavaScript 代码可以通过多种方式实现,具体取决于应用场景和需求。以下是几种常见的方法:

使用 ScriptEngine(Nashorn 引擎)

Java 提供了 javax.script 包,通过 ScriptEngine 可以执行 JavaScript 代码。Nashorn 是 Java 8 中默认的 JavaScript 引擎。

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

public class JsExample {
    public static void main(String[] args) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("nashorn");

        try {
            engine.eval("print('Hello from JavaScript!')");
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }
}

调用外部 JavaScript 文件

可以通过 ScriptEngine 加载并执行外部的 JavaScript 文件。

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.FileReader;
import java.io.IOException;

public class JsFileExample {
    public static void main(String[] args) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("nashorn");

        try {
            engine.eval(new FileReader("script.js"));
        } catch (ScriptException | IOException e) {
            e.printStackTrace();
        }
    }
}

在 Java 中调用 JavaScript 函数

可以通过 invokeFunction 方法调用 JavaScript 中定义的函数。

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

public class JsFunctionExample {
    public static void main(String[] args) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("nashorn");

        try {
            engine.eval("function greet(name) { return 'Hello, ' + name; }");
            Invocable invocable = (Invocable) engine;
            String result = (String) invocable.invokeFunction("greet", "World");
            System.out.println(result);
        } catch (ScriptException | NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}

使用 GraalVM 的 Polyglot API

GraalVM 提供了更强大的多语言支持,可以直接在 Java 中调用 JavaScript 代码。

import org.graalvm.polyglot.Context;
import org.graalvm.polyglot.Value;

public class GraalJsExample {
    public static void main(String[] args) {
        try (Context context = Context.create()) {
            Value result = context.eval("js", "1 + 2");
            System.out.println(result.asInt());
        }
    }
}

注意事项

java如何调用js

  • Nashorn 引擎在 Java 11 及更高版本中已被标记为废弃,推荐使用 GraalVM 或其他替代方案。
  • 如果需要在 Web 环境中调用 JavaScript,可以考虑使用 Rhino 引擎或直接通过 Java 与浏览器的交互(如 Selenium)。
  • GraalVM 提供了更好的性能和现代 JavaScript 支持,但需要额外的依赖和配置。

以上方法可以根据具体需求选择合适的方式在 Java 中调用 JavaScript。

标签: javajs
分享给朋友:

相关文章

如何运行java

如何运行java

运行Java程序的方法 安装Java开发工具包(JDK) 确保系统已安装JDK。可通过命令行输入 java -version 检查是否安装。若未安装,需从Oracle官网或OpenJDK下载并配置环境…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

如何学java

如何学java

学习Java的基础知识 Java是一门面向对象的编程语言,掌握基础语法是入门的关键。需要了解变量、数据类型、运算符、控制结构(如if-else、for循环、while循环)、数组等概念。可以通过官方文…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…