问题标签 [scriptengine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
319 浏览

java - 如何将 javascript 文件链接到 java.awt.Canvas?

我有一个 java.awt.Canvas 对象和一个 JavaScript 文件 canvas.js

canvas.js 包含:

然后通过以下方式将 canvas.js 加载到 ScriptEngine:

现在我希望 canvas.js 在 java.awt.Canvas 对象上绘图。是否有可能,如果是,那么如果不是,那有什么替代方案?

0 投票
1 回答
1831 浏览

java - Java 在 ScriptEngine 中默认加载脚本

有没有办法在脚本引擎中包含(或加载)外部脚本,以便外部脚本中定义的所有函数在engine.eval()方法中都可用?

在我们的应用程序中,我们根据用户输入执行一些 java 脚本代码。当用户请求时,应用程序创建一个 ScriptEngine 实例并根据输入参数执行适当的 javascript 代码。

这里的问题是javascript中有一些重复的功能。考虑一个例子:

场景1:当用户输入为十进制经纬度时计算距离
-> 这里我可以简单地计算并返回距离。

场景2:当用户输入为度-分-秒纬度和经度时计算距离。
-> 这里将度-分-秒输入转换为十进制的经纬度,然后处理与场景1相同。

由于它们是不同的场景,因此计算距离代码是重复的。那么有什么方法可以让我拥有一个包含可重用函数的脚本并在我创建 ScriptEngine 实例时加载它。

注意:我使用 Java 8 和捆绑的 Nashorn JavaScript 引擎。

有什么想法和/或建议吗?

0 投票
1 回答
763 浏览

java - Java ScriptEngine (nashorn & rhino):如何堆叠作用域/绑定?

我必须使用Rhino1.7R4及其org.mozilla.javascript包移植一个软件,以使用javax.script包及其 ScriptEngine(Java 6 和 7 中的Rhino ,Java 8 中的Nashorn)。

主要问题是堆栈范围(绑定)。使用 Rhino jar,我这样做:

所以

  • 如果一个变量在没有 var 的情况下定义,它是一个全局变量(根范围)
  • 如果一个变量是用 var 定义的,它是一个局部变量(当前范围)
  • 如果变量被访问或修改,引擎在其当前范围内查找,以及父级和祖父级......以及全局范围

这是 JS 标准行为。

如何使用 javax.script API做与setParentScope相同的操作?

0 投票
1 回答
3032 浏览

java - 如何通过 ScriptEngine 访问仅静态方法的类?

我有一个Foo只有一个静态方法(值得注意)的类,称为bar(). 我需要bar()通过运行时脚本(在本例中为 Javascript)进行访问。

以上有效,但对我来说似乎有点奇怪。具体来说,我不想创建一个新的 Foo。Foo是公共的,所以必须有一种方法让脚本工厂知道它,而无需实例化新对象。我已经尝试过factory.put("foo", Foo.class);,但没有奏效。我还尝试在 Javascript 代码中指定包,例如。

但这也没有用。

问:有没有办法从嵌入式脚本访问类的静态方法,而无需将该类的实例绑定到引擎?

0 投票
1 回答
161 浏览

java - 将 JavaScript 等式运算符绑定到 Java 函数

我正在使用 Java 中的 JavaScript 引擎来评估一些字符串。我想user.group == group1在 JavaScript 中评估 Java 方法user.hasGroup(group1)。用户包含组字符串列表。

我知道我可以将函数与以下内容绑定,但我不确定如何替换相等运算符并将右侧用作参数。(jsEngine 是我的 JavaScript 引擎)

0 投票
1 回答
159 浏览

java - ScriptEngine eval 中的 ReferenceError

我在 JDK 7 中使用 JavaScript 引擎。有没有办法评估一个表达式,比如a||b如果ab未定义,而不是抛出异常ReferenceError: "a" is not defined.

0 投票
2 回答
1044 浏览

java - 如何在java中评估字符串数学表达式

我想在 java 中评估一个 sting 数学表达式。此字符串应包含应用于向量或简单数字的函数(avg、max、min、...)。我已经将 ScriptEngineManager 与 javasript 引擎一起使用,但它只使用数字。我也看到了 symja lib,但它看起来太复杂了,没有记录。怎么做?谢谢

0 投票
1 回答
626 浏览

java - 使用自定义 ScriptEngine 时 Java ScriptEngineManager 返回 null

我之前在 StackExchange上问过这个问题。因为它被搁置了,所以我正在关注评论并询问如何解决这个问题。为避免重复自己并复制粘贴解释,请阅读我询问的上一个问题以获取完整详细信息。

我正在尝试为 Java 编写自己的自定义 ScriptEngine。我尝试扩展AbstractScriptEngine并实现ScriptEngineFactory并填写所有最低要求的方法,只是为了测试我是否能够至少开始使用脚本。(请参阅此处的代码)当我运行以下代码时...

manager.getEngineByExtension("sbs");方法返回空值。我也尝试过使用getEngineByMimeType("text/SandboxScript");以及,getEngineByName("SandboxScript");但这些都没有奏效。

有什么我设置不正确的吗?

0 投票
1 回答
1909 浏览

java - 如何在使用 ScriptEngine 从 Java 运行 python 脚本时调用 python 脚本中的函数并传递参数

我正在使用下面的代码python script从 a 中执行 a Java class

我想知道如何test.py使用上述方法调用内部函数并将一些参数传递给该函数?

注意:我知道更好的执行方法python script是通过使用Process,但由于系统要求,我不想使用Process方法,因为它每次执行都会产生一个新进程。

0 投票
1 回答
90 浏览

java - 在java程序中获取-pcs之类的信息

我目前正在使用 nashorn 在 java 项目中运行 JavaScript。它用于允许用户在我的 Java 程序的某些部分编写脚本。

我知道像“--no-java”和“--no-syntax-extensions”这样的标志来封装用户的JavaScript代码。几天前,我遇到了“-pcs”选项。它在执行目录中创建一个名为“NashornProfile.txt”的文本文件。(有关更多信息,请参阅Nashorn 分析器输出格式

有没有办法直接获取写入文件的信息,或者有类似的方法来获取这些信息?我不想读取创建的文件,因为我将运行多个脚本实例,并且它们总是输出到这个精确的文本文件。

我知道文件路径被硬编码到 LinkerCallSite 类中。我愿意接受任何更好的替代方法来从代码中监视正在运行的脚本(尤其是全局变量和一些运行时特征)。

如果我忽略了某些内容,我很抱歉,但我对脚本 API 不太熟悉。

提前感谢您的任何答案:)