当前位置:首页 > Java

java 如何调用js方法

2026-03-03 20:27:54Java

调用 JavaScript 方法的常见方式

在 Java 中调用 JavaScript 方法通常需要借助脚本引擎或第三方库。以下是几种常见的方法:

使用 ScriptEngine(Nashorn 或 GraalVM)

Java 内置了 javax.script 包,可以通过 ScriptEngine 执行 JavaScript 代码。Nashorn 是 Java 8 的默认 JavaScript 引擎,Java 15 后推荐使用 GraalVM 的 JavaScript 引擎。

java 如何调用js方法

import javax.script.*;

public class JsDemo {
    public static void main(String[] args) throws Exception {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("javascript");

        // 执行 JavaScript 代码
        engine.eval("function greet(name) { return 'Hello, ' + name; }");

        // 调用 JavaScript 函数
        Invocable invocable = (Invocable) engine;
        String result = (String) invocable.invokeFunction("greet", "World");
        System.out.println(result); // 输出: Hello, World
    }
}

使用 GraalVM 的 Polyglot API

GraalVM 提供了更强大的多语言支持,可以通过 org.graalvm.polyglot 包调用 JavaScript。

java 如何调用js方法

import org.graalvm.polyglot.*;

public class GraalJsDemo {
    public static void main(String[] args) {
        try (Context context = Context.create("js")) {
            // 执行 JavaScript 代码
            context.eval("js", "function add(a, b) { return a + b; }");

            // 调用 JavaScript 函数
            Value addFunction = context.getBindings("js").getMember("add");
            int result = addFunction.execute(2, 3).asInt();
            System.out.println(result); // 输出: 5
        }
    }
}

使用 Rhino 库

Rhino 是 Mozilla 提供的 Java 实现的 JavaScript 引擎,适用于较老版本的 Java。

import org.mozilla.javascript.*;

public class RhinoDemo {
    public static void main(String[] args) {
        Context cx = Context.enter();
        try {
            Scriptable scope = cx.initStandardScope();

            // 执行 JavaScript 代码
            cx.evaluateString(scope, "function square(x) { return x * x; }", "script", 1, null);

            // 调用 JavaScript 函数
            Object result = cx.evaluateString(scope, "square(4)", "script", 1, null);
            System.out.println(result); // 输出: 16
        } finally {
            Context.exit();
        }
    }
}

通过 J2V8 调用 V8 引擎

J2V8 是 V8 引擎的 Java 绑定,性能较高,适合需要高性能的场景。

import com.eclipsesource.v8.*;

public class V8Demo {
    public static void main(String[] args) {
        V8 runtime = V8.createV8Runtime();

        // 执行 JavaScript 代码
        runtime.executeVoidScript("function multiply(a, b) { return a * b; }");

        // 调用 JavaScript 函数
        int result = runtime.executeIntegerFunction("multiply", new Object[]{3, 4});
        System.out.println(result); // 输出: 12

        runtime.release();
    }
}

注意事项

  • Nashorn 在 Java 15 后被标记为废弃,建议在新项目中使用 GraalVM。
  • 脚本引擎的性能可能不如原生 Java 代码,频繁调用时需谨慎。
  • 跨语言调用时需要注意数据类型转换问题。
  • 确保环境中有对应的引擎实现(如 GraalVM 或 Rhino 的依赖)。

以上方法可以根据具体需求选择,现代 Java 项目推荐优先考虑 GraalVM 的方案。

标签: 方法java
分享给朋友:

相关文章

java如何运行

java如何运行

运行Java程序的基本方法 Java程序的运行需要经过编写、编译和执行三个主要阶段。以下是具体步骤: 编写Java源代码 创建一个以.java为后缀的文件,例如HelloWorld.java。文件内…

jquery的方法

jquery的方法

jQuery 常用方法分类 jQuery 是一个快速、简洁的 JavaScript 库,提供了大量简化 DOM 操作、事件处理、动画效果和 AJAX 交互的方法。以下是 jQuery 核心方法的分类和…

如何学java

如何学java

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

java如何输入数组

java如何输入数组

输入数组的方法 在Java中,可以通过多种方式输入数组,具体取决于输入源(如控制台、文件等)和数组类型(如基本类型或对象类型)。以下是几种常见的方法: 使用Scanner从控制台输入 对于基本数据类…

java如何连接mysql

java如何连接mysql

连接 MySQL 数据库的基本步骤 添加 MySQL 驱动依赖 在项目中引入 MySQL 的 JDBC 驱动。如果使用 Maven,在 pom.xml 中添加以下依赖: <dependency…

vue实现方法调用

vue实现方法调用

Vue 方法调用的实现方式 在 Vue 中,方法调用主要通过 methods 选项定义,并通过模板或脚本直接调用。以下是常见的实现方式: 在模板中直接调用方法 通过 v-on 指令(或简写 @)绑定…