问题标签 [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.
java - 如何从 Java 评估我自己的 Groovy 脚本?
我尝试从 Java 类调用我自己的 groovy 脚本函数,用户也可以使用标准表达式。
例如:
这是 MyCustomScript.groovy
运行时,此行scrpt.evaluate("str1.concat(str2)")
按预期工作,但scrpt.evaluate("customConcat(str1, str2)")
引发异常:
我可以像下面这样调用我的自定义方法并且它可以工作
但是,这次我找不到如何评估标准表达式,如子字符串、concat 等......
那么我应该如何评估自定义和标准表达式呢?
java - 具有多线程和锁的 Java ScriptEngine
我正在使用 JSR223 ScriptEngine ( JAV8 ),它本身不是线程安全的。由于我需要多个线程才能访问 ScriptEngine,因此每个 ScriptEngine 都属于一个 EngineContext 对象。这些 EngineContexts 再次具有一个 ReentrantLock,各个线程在访问 ScriptEngine 之前获取它。
我遇到的问题是线程成功获取了锁,但是当两个线程调用它时,有时我仍然会遇到 JVM 崩溃(著名的 SIGSEGV (0xb))。
作为概述,这里是锁定过程的一些伪代码
我真的不确定,这里的问题是什么。
java - 从 Java 中使用 ScriptEngine 调用自定义脚本函数
我在用 python、groovy 和 javascript 编写的不同脚本文件上具有相同名称的相同自定义函数。用户可以选择要使用的脚本之一。我想以通用方式从这些脚本中调用函数。
通过这种方式,我可以调用我的函数,甚至将 ScriptEngineManager 参数更改为“javascript”或“groovy”,并使用“CustomJs.js”或“Customgroovy.groovy”更改阅读器文件。
但是,我想知道有没有一种方法可以在不使用invokeFunction
如下方式的情况下调用函数:
首先,评估脚本并将结果放在绑定上,然后在此对象上调用函数。
那么,如果有这样的方式或有其他建议,这对我来说是最通用的方式吗?
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 的实例(它在脚本引擎中明确实现)?
java - 获取 javascript 对象的字段值
我一直在使用 rhino 来允许定制一些应用程序。下面是一个从 Java 调用的 JavaScript 函数示例:
然后,Java 应用程序可以获取返回对象的值以执行它需要执行的任何操作。
现在 rhino 是 JVM 的一部分,我想使用脚本 API 而不是 Rhino API,但我还没有找到如何从 Java 代码中获取 JavaScript 对象的字段值。
java - 在 Java 中调用 JavaScript 函数
我正在尝试在 Java 项目中使用 javascript 代码发送电子邮件。数据库连接工作正常,我已经测试过了。我收到错误: javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException: missing) 在第 1 行的形式参数 (#1) 之后
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 类。所以我不明白为什么它没有按预期工作。
有什么建议么?
提前致谢,
兰迪
java - Java ScriptEngine - 禁用导入
我一直在到处搜索,但一无所获,所以我想使用 Java 的内置 JavaScript 引擎,但用户无法导入 java 类,如下所示:
或者
或者
java - Java中JavaScript引擎中的未定义对象
在Java7中执行以下代码
我得到错误
是否有一个选项可以为未定义的对象评估为 null/false,比如在 JavaScript 中?
我知道一个选项将是执行类似“this.x&this.y”而不是“x&y”的操作,但我无法控制该字符串(用户输入)。
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()