问题标签 [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 投票
4 回答
148 浏览

java - 评估字符串时的错误答案

我的代码如下所示:

第一个 SOP 按预期打印为 false,但第二个 SOP 打印为 true。当我将变量与两个值进行比较时,它没有给出正确的结果。即使条件的一半为真,它也会给出真值。有什么解决方法吗?请建议。谢谢。

0 投票
1 回答
1115 浏览

java - 使用 Java ScriptEngine 同步执行多个评估

如何使用单个 Java ScriptEngine 同步执行多个评估?

例如

方法1包括

sce.eval(code1);

方法2包括

sce.eval(code2);

如果两种方法同步,则​​评估同时运行

0 投票
1 回答
233 浏览

java - 脚本引擎的 ExecutorService 线程间隔间隙

这是从 zip 文件中加密条目并将其存储为文件的 java 方法。文件读写没有问题,所以与2-5行无关。问题如下所述...

ExecutorService对象(es)用于从ZipEntry[]数组(ze)1by1中获取Zip Entry,并由固定数量的线程同时执行它们。每个线程都使用ScriptEngineScriptEngine 数组 (se) 中的一个对象来实现。当一个线程完成其执行时,脚本引擎将为另一个条目腾出空间。问题是对于第一批线程资源(entry),executor没有平均划分entry。因此,发送到单个引擎的条目不止一个,导致死锁

  1. 如何在前一个线程之后延迟线程运行几毫秒?

    或者

  2. 如何在脚本引擎繁忙时对资源进行排队。但我看不到解决方案:

这是代码:

0 投票
2 回答
1250 浏览

javascript - 克隆整个 JavaScript ScriptEngine

我需要以某种方式深度克隆我的ScriptEngine对象的整个绑定集。

我试过的

  • 到目前为止,我已经尝试使用Cloner 库来克隆整个 Bindings 结构。如果它有效,那就太好了,因为它可以确保精确的副本,包括私有变量。但这会导致 jvm 堆损坏(jvm 只是崩溃,退出代码为 -1073740940)。有时它不会崩溃,但会发生奇怪的事情,比如System.out.println()停止正常工作......

  • 我还研究了使用 ScriptEngine 中的 js 代码克隆对象,以便我可以将它们作为 NativeObjects 获取并在一些 java 映射中管理它们。但我发现的所有克隆方法都有缺陷。我想要对象的精确快照。例如,如果两个对象 a 和 b 中的每一个都包含引用同一对象 c 的字段(例如 a.fa 和 b.fb),则当使用(jQuery.extend()例如)克隆时,克隆的 a 和 b 将引用不同的克隆c,而不是引用一个相同的克隆。以及许多其他边缘问题。a.fab.fb

  • 我还尝试使用 Cloner 克隆整个 ScriptEngine(不仅是绑定),还尝试使用 Rhino 的 js 引擎并克隆整个范围(而不是捆绑的 ScriptEngine 包装器)。但是堆损坏问题仍然存在。

为什么我需要这样做

我需要这个,因为我必须能够将整个 ScriptEngine 绑定的值恢复到以前的某个点。我需要制作绑定的精确快照。

该应用程序是我的博士研究项目的一部分,该项目包括运行带有节点(在 java 中实现)的状态机,这些节点附加了 js 代码。js 代码由最终用户输入,并在运行时进行评估。当无法通过路径到达最终状态时,算法会向后退一步,试图找到替代路径。每向后退一步,它都必须撤消 js 引擎绑定中可能发生的任何更改。


所有全局变量名称在 js eval-ing 之前都是已知的,并且是对象(用户为节点键入代码,然后(在 java 中)将其组织成具有特定名称模式的 js 对象)。但是它们的内容可以是任何内容,因为这是由用户 js 代码控制的。

所以我想我现在唯一的解决方案是使用 js 代码克隆 js 对象。

0 投票
2 回答
1237 浏览

c# - Roslyn VisualBasic.ScriptEngine 无法识别用 C# 编写的 hostObject

我们的项目需要能够有一个简单的业务规则,我们的客户可以在 Visual basic 中编写脚本。虽然我们的主程序是用 C# 编写的

客户想要执行的脚本可能是这样的(我正在考虑最简单的情况)

所以我在 C# 中创建了一个带有 Code 和 MappedCode 属性的 RowData 类

我创建了一个简单的主机对象类,例如

使用 Roslyn.Scripting.VisualBasic.ScriptEngine 我创建一个引擎,创建一个带有 HostObjectModel 实例的会话并执行 engine.Execute(vbCode, session)

它告诉我

(2,25):错误 BC30451:未声明“行”。由于其保护级别,它可能无法访问。

但是如果我在 C# 上创建类似的代码片段

并使用 CSharp.ScriptEngine 一切都会正常工作

那么,有什么问题,为什么 VisualBasic.ScriptEngine 看不到用 C# 编译的类的公共属性,我认为应该是基于相同的 MSIL 语言,还是我错了?


更新:我安装了 Visual Basic 并在 VB 上创建了 ScriptModel 库。我还在类声明和 vbCode 中用 Row() 函数替换了 Row 属性。都没有帮助。:( 当我从 C# 运行 VisualBasic.ScriptEngine 时,它​​似乎根本不起作用。

0 投票
2 回答
2985 浏览

java - 使用 Java 的 ScriptEngine 或 WebEngine 类调用 DOM 对象

是否可以使用 Java 中的 ScriptEngine 或 WebEngine 类修改 html 元素?我尝试了以下方法:

我在一个例子中看到了这样的东西,但它似乎没有用。我也试过这个:

这也没有奏效。是因为该语句未链接到 WebEngine 吗?

0 投票
1 回答
227 浏览

java - Java ScriptEngine 因“长”添加而失败?

我正在使用 ScriptEngine 执行字符串中指定的计算。我尝试了一个简单的程序,如下所示:

这给出了 1340992126976 的输出,但正确答案是 1340992172921

这似乎适用于相当大的整数,但不适用于长值。我希望它们作为长值,因为它们是时间戳,我想这样使用它们。关于什么可以使这项工作的任何想法?

谢谢。

0 投票
1 回答
2279 浏览

java - 如何使用 Java ScriptEngine 创建 Javascript 函数

在这个问题中,我询问了有关支持表达式语言的问题,并成功使用了 Javascript 思想将简单的表达式语言放入 java

但是所需的 Javascript 表达式已经变得非常冗长,我试图弄清楚如何使用 ScriptEngine 创建可以在我的表达式中引用的 javascript 函数,以便表达式可以更短。

到目前为止,我已经通过在用户输入的字符串上使用 reexp 破解了一个解决方案,该字符串可以包含一个名为 ifempty 的伪函数,然后我在传递给脚本引擎之前将其转换为 javascript

它可以解析一个表达式,例如

但我想知道一个合适的解决方案,我实际上创建了一个真正的 javascript 函数。

0 投票
1 回答
660 浏览

blackberry - 如何从黑莓本机调用javascript函数?

我正在开发一个应用程序,我需要在其中调用一些从黑莓本机到 javascript 的方法。

当我点击后退键事件时,我想触发onBackKeyDown()方法,该方法在 javascript 中声明。

主.java

main.js

}

正如我所知道的,通过使用"extendScriptEngine",在 javascript 中声明的方法在本机中调​​用。但是在这里如何根据我上面的代码调用本机的javascript方法......任何人都可以帮我解决这个问题......

0 投票
1 回答
415 浏览

javascript - 如何使用 Rhino 构建 PEG.js 0.7.0 解析器(Java SE 6 ScriptEngine API)

我一直在使用 PEG.js 版本 0.6.1 成功地使用 Maven 插件(即从 Java 代码调用 PEG.js)构建解析器,但现在在尝试升级到新版本时,它失败并显示错误消息:

sun.org.mozilla.javascript.internal.EcmaError: SyntaxError: missing ; before statement (#3213(eval)#1) in #3213(eval) at line number 1

在调试时,我注意到来自 PEG.buildParser() 函数调用的解析器看起来在语法上是错误的,而从浏览器调用它时当然不会发生这种情况。

我是这样称呼它的:

其中,grammarSource在我的测试用例中,是网站中用作示例的基本语法,而PEGJS_LIB = peg-0.7.0.js.

欢迎任何想法!我这里已经用完了...