问题标签 [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 回答
8782 浏览

java - 如何从 Java 评估我自己的 Groovy 脚本?

我尝试从 Java 类调用我自己的 groovy 脚本函数,用户也可以使用标准表达式。

例如:

这是 MyCustomScript.groovy

运行时,此行scrpt.evaluate("str1.concat(str2)")按预期工作,但scrpt.evaluate("customConcat(str1, str2)")引发异常:

我可以像下面这样调用我的自定义方法并且它可以工作

但是,这次我找不到如何评估标准表达式,如子字符串、concat 等......

那么我应该如何评估自定义和标准表达式呢?

0 投票
2 回答
834 浏览

java - 具有多线程和锁的 Java ScriptEngine

我正在使用 JSR223 ScriptEngine ( JAV8 ),它本身不是线程安全的。由于我需要多个线程才能访问 ScriptEngine,因此每个 ScriptEngine 都属于一个 EngineContext 对象。这些 EngineContexts 再次具有一个 ReentrantLock,各个线程在访问 ScriptEngine 之前获取它。

我遇到的问题是线程成功获取了锁,但是当两个线程调用它时,有时我仍然会遇到 JVM 崩溃(著名的 SIGSEGV (0xb))。

作为概述,这里是锁定过程的一些伪代码

我真的不确定,这里的问题是什么。

0 投票
1 回答
1878 浏览

java - 从 Java 中使用 ScriptEngine 调用自定义脚本函数

我在用 python、groovy 和 javascript 编写的不同脚本文件上具有相同名称的相同自定义函数。用户可以选择要使用的脚本之一。我想以通用方式从这些脚本中调用函数。

通过这种方式,我可以调用我的函数,甚至将 ScriptEngineManager 参数更改为“javascript”或“groovy”,并使用“CustomJs.js”或“Customgroovy.groovy”更改阅读器文件。

但是,我想知道有没有一种方法可以在不使用invokeFunction如下方式的情况下调用函数:

首先,评估脚本并将结果放在绑定上,然后在此对象上调用函数。

那么,如果有这样的方式或有其他建议,这对我来说是最通用的方式吗?

0 投票
0 回答
905 浏览

scriptengine - 将脚本结果传递给 Scala 2.11 ScriptEngine 中的主程序

在 2.11 Milestone 7 中使用 Scala 脚本引擎,我如何从脚本引擎中获取类型化的值?我收到诸如“mypackage.Holler 无法转换为 mypackage.Holler”之类的错误消息。

这是用例(简化为基本内容)。我想使用脚本来准备和配置我将在主程序中处理的标准类型的对象。我有一个特点:

我在 Scala 中有一个用户脚本,保存在 /home/me/Foo.scala 文件中

当我使用 IMain.eval(Reader) 运行此脚本时,我希望对象 Foo 将被返回,因为它是最后一条语句的结果。这是一个程序,包括几个有用的打印输出来运行脚本:

该脚本在脚本引擎下运行得很好。但结果不能投给霍勒。该程序的输出如下:

这告诉我脚本引擎成功识别了类路径,并且正在构造 Foo 对象。但是脚本中的特征 mypackage.Holler(来自公共类路径)与主程序中的特征 mypackage.Holler 不同。

如果我将以下行添加到脚本中:

我懂了:

  • 正在执行的喊叫方法(“Hello World!”打印出来),
  • “结果”被添加到定义的符号列表中
  • 结果显然与 Holler 类型兼容。

我可以将“捕手”对象绑定到脚本引擎。它的代码如下所示:

我与

现在“捕手”出现在脚本引擎的已定义符号列表中,我可以使用捕手通过如下命令进入脚本引擎

但后来我得到奇怪的“编译时间”ClassCastExceptions 说:

如果我将 Catcher 中的“项目”设为 Any,那么在我这样做之前我不会得到异常

在主程序中。但我仍然得到几乎相同的例外。就好像两个不兼容的类加载器正在同一个类路径中使用。那么,如何从主程序访问 Foo 对象作为 Holler 的实例(它在脚本引擎中明确实现)?

0 投票
1 回答
834 浏览

java - 获取 javascript 对象的字段值

我一直在使用 rhino 来允许定制一些应用程序。下面是一个从 Java 调用的 JavaScript 函数示例:

然后,Java 应用程序可以获取返回对象的值以执行它需要执行的任何操作。

现在 rhino 是 JVM 的一部分,我想使用脚本 API 而不是 Rhino API,但我还没有找到如何从 Java 代码中获取 JavaScript 对象的字段值。

0 投票
3 回答
1546 浏览

java - 在 Java 中调用 JavaScript 函数

我正在尝试在 Java 项目中使用 javascript 代码发送电子邮件。数据库连接工作正常,我已经测试过了。我收到错误: javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException: missing) 在第 1 行的形式参数 (#1) 之后

0 投票
1 回答
691 浏览

java - JavaScript ScriptEngine 在 Google App Engine for Java (GAE/J) 中不起作用

我遇到一个问题,当我尝试使用 ScriptEngine eval 时,总是返回 0 值。通过使用 Logger,我能够确定正在生成 NullPointerExceptions。经过进一步检查,GAE 似乎并不总是返回有效的脚本引擎(如果有的话),因为当您尝试使用它时它会引发异常。

我的代码如下所示:

如果我将它作为 WebApp 在本地运行(在 Eclipse 和 Netbeans 中,以及在 Tomcat 和 Glassfish 4.0 中),一切正常。

我试图评估的一些字符串:

  • 62.0 / 100
  • 0.0 * 352.0
  • (0 - 428) * 1000
  • (0 - 597) * 1000
  • 73.0 / 100

注意:0 或 0.0 来自其他在先前调用中失败的评估。由于此函数在错误时返回 0。

根据Google 的 JRE 类白名单,允许使用 ScriptEngineManager 和 ScriptEngine 类。所以我不明白为什么它没有按预期工作。

有什么建议么?

提前致谢,

兰迪

0 投票
1 回答
708 浏览

java - Java ScriptEngine - 禁用导入

我一直在到处搜索,但一无所获,所以我想使用 Java 的内置 JavaScript 引擎,但用户无法导入 java 类,如下所示:

或者

或者

0 投票
1 回答
539 浏览

java - Java中JavaScript引擎中的未定义对象

在Java7中执行以下代码

我得到错误

是否有一个选项可以为未定义的对象评估为 null/false,比如在 JavaScript 中?

我知道一个选项将是执行类似“this.x&this.y”而不是“x&y”的操作,但我无法控制该字符串(用户输入)。

0 投票
0 回答
1317 浏览

javascript - 有效的 javascript eval(..) 在 Java 下使用 ScriptEngine 失败

我有一个 javascript eval(...) 可以在网页中正确执行,也可以使用“unpacker”网页工具 http://matthewfl.com/unPacker.html正确执行,所以我知道 eval(.. .) 陈述是正确的。

我需要在java下执行那个eval(),所以我使用加载并执行了javascript引擎

简单的评估工作正常,但我在网页上工作的更复杂的评估失败了

我还尝试将新的 nashorn 与 java8 一起使用

但它也失败了

我的最后一个测试是使用 java8 jjs nashorn 解释器,它也失败了

下面显示了失败的控制台输出。

任何有关如何在 java 下评估这些的帮助将不胜感激。也许需要更改 eval 的语法?

这是 eval()