java 如何调用js方法
调用 JavaScript 方法的常见方式
在 Java 中调用 JavaScript 方法通常需要借助脚本引擎或第三方库。以下是几种常见的方法:
使用 ScriptEngine(Nashorn 或 GraalVM)
Java 内置了 javax.script 包,可以通过 ScriptEngine 执行 JavaScript 代码。Nashorn 是 Java 8 的默认 JavaScript 引擎,Java 15 后推荐使用 GraalVM 的 JavaScript 引擎。

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。

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 的方案。






