从 Java 代码调用外部 JavaScript 函数
本文将讨论在 Java 程序中包含 JavaScript 源代码以及从 Java 代码调用 JavaScript 函数。
从 Java 代码调用外部 JavaScript 函数
在 Java 中调用 JavaScript 源非常简单。 如果我们开发一个必须使用 JavaScript 的 Java 应用程序,我们将单独创建脚本文件,然后在 Java 源代码中包含并调用它以运行所需的功能。
让我们以下面的场景为例。
首先,我们需要在一个单独的 JavaScript 文件中定义函数,这些函数将在我们的 Java 代码中调用。 我们创建了一个 JavaScript 源代码来执行算术任务,例如将两个传递的值相加。
例子:
var myCalculations = new Object();
myCalculations.addition = function (v1, v2) v1 + v2;
在此 JavaScript 源代码中,我们创建了一个新对象 myCalculations。 在该对象中,我们定义了一个加法函数,它将 2 个值作为参数并将它们相加。
我们需要使用扩展名 .js 保存此源,因为这将是我们的 JavaScript 文档。 要加载该脚本并获取对象,我们需要使用 ScriptEngineManager 的 eval() 函数。
ScriptEngineManager 是默认的 Java 库,可以导入到 Java 代码中。 我们可以使用该库的一个实例来加载脚本。
我们可以加载 JavaScript 文件,如下所示:
String javascriptPath = "drive:/folder/fileName.js";
engine.eval("load('" + javascriptPath + "')");
Object myCalculations = engine.get("myCalculations");
现在我们可以通过名称获取想要的函数,并传入参数,如下所示:
Object addingResult = inv.invokeMethod(myCalculations, "addition", x, y);
下面是一个完整的 Java 程序示例,该程序将使用 ScriptEngineManager 使用 JavaScript 文件。
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class Main {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
Invocable inv = (Invocable) engine;
String javascriptPath = "drive:/folder/fileName.js";
engine.eval("load('" + javascriptPath + "')");
Object myCalculations = engine.get("myCalculations");
int x = 10;
int y = 5;
Object addingResult = inv.invokeMethod(myCalculations, "addition", x, y);
System.out.println("Your addition result will be: "+addingResult);
}
}
输出:
Your addition result will be: 15
代码解释:
- 在上面的 Java 代码中,我们首先导入了一个有用的库 ScriptEngineManager 来加载脚本。
- 在 main 函数中,我们创建了一个 ScriptEngineManager 实例,并定义了名为 JavaScript 的脚本引擎。
- 现在,我们已经声明了一个字符串变量,它将分配给 JavaScript 文件的路径。
-
然后,我们使用
engine.eval()
方法加载该路径。 - 现在,我们已经调用了 JavaScript 文件的对象 myCalculations 并使用它来调用该对象的函数。
-
最后,我们在函数中传递了 2 个整型值,并使用 Java 默认函数
System.out.println("anything you want to print")
在终端中显示结果。
相关文章
Do you understand JavaScript closures?
发布时间:2025/02/21 浏览次数:108 分类:JavaScript
-
The function of a closure can be inferred from its name, suggesting that it is related to the concept of scope. A closure itself is a core concept in JavaScript, and being a core concept, it is naturally also a difficult one.
Do you know about the hidden traps in variables in JavaScript?
发布时间:2025/02/21 浏览次数:178 分类:JavaScript
-
Whether you're just starting to learn JavaScript or have been using it for a long time, I believe you'll encounter some traps related to JavaScript variable scope. The goal is to identify these traps before you fall into them, in order to av
How much do you know about the Prototype Chain?
发布时间:2025/02/21 浏览次数:150 分类:JavaScript
-
The prototype chain can be considered one of the core features of JavaScript, and certainly one of its more challenging aspects. If you've learned other object-oriented programming languages, you may find it somewhat confusing when you start
用 jQuery 检查复选框是否被选中
发布时间:2024/03/24 浏览次数:102 分类:JavaScript
-
在本教程中学习 jQuery 检查复选框是否被选中的所有很酷的方法。我们展示了使用直接 DOM 操作、提取 JavaScript 属性的 jQuery 方法以及使用 jQuery 选择器的不同方法。你还将找到许多有用的
jQuery 中的 Window.onload 与 $(document).ready
发布时间:2024/03/24 浏览次数:180 分类:JavaScript
-
本教程演示了如何在 jQuery 中使用 Window.onload 和 $(document).ready 事件。