当前位置:首页 > 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 文件

java如何调用js

可以通过 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 中定义的函数。

java如何调用js

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());
        }
    }
}

注意事项

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

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

标签: javajs
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js防抖和节流实现

js防抖和节流实现

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

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…