java如何调用js
调用 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());
}
}
}
注意事项

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






