问题标签 [graaljs]
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 - 用于 javascript 事件处理程序的主机对象
我想允许 JavaScript 注册事件,语法如下
该event对象提供不同的方法,具体取决于是什么'eventName'(取决于我想为其添加处理程序的事件类型)。
我需要为object和创建主机对象event,我假设需要的类必须object看起来像
如果有两种类型的事件。
但我不知道如何让 graalvm 自动选择正确的on方法,也不知道第二个参数使用什么类型(它必须是一个 JavaScript 匿名函数,它接受某个类型的单个参数,并且以后必须由我的 Java 代码运行)。
如何存储 JavaScript 匿名函数
作为某种 Java Runnable,并确保 GraalVM 知道on根据第一个字符串参数的值使用哪种方法(因为event传递的对象对于不同的事件会有所不同)。
我认为这可能是一个超级复杂的问题,我发现正确措辞很棘手。
我想为 JavaScript 创建一种方法来注册事件处理程序,这些事件处理程序是稍后将使用某些参数调用的函数。
javascript - Graal Javascript - 线程安全
在多线程应用程序(例如每个 servlet 请求)中使用 Graal.js 的推荐方法是什么?我们像这样使用 Graal.js
我们是否应该为每个执行线程提供唯一的上下文/绑定。这可以通过上下文/绑定对池或使用 threadlocal 来完成。这是正确的方法吗?
graalvm - 使在 Chrome 中调试 graaljs 成为可能的神器
我正在尝试在 graaljs 中采用调试:
java.lang.IllegalArgumentException: Could not find option with name inspect.
我的build.gradle依赖项如下所示:
而且我绝对记得曾经我应该添加另一个依赖项,以便可以在 chrome 中进行调试 - 但是我不记得 - 或者在任何代码源或文档中找到 - 我应该添加什么作为依赖项
graalvm - 是否可以将预编译的 js 存储和加载到 org.graalvm.polyglot.Context
有什么方法可以将 javascript 源代码转换为一些预编译的声明,可以以某种方式存储和加载,org.graalvm.polyglot.Context而不是将其评估为原始字符串?像--persistent-code-cache在 nashorn 中没有记录的东西。
graalvm - 如何将 Map 从 Java 传递到 graal.js?
我在 Scala/Java 中有一个 Map 我希望在 graal.js 引擎上运行的 Javascript 中可见。
后来,graal.js 中的一个 Javascript 函数被调用:
其中 bindFn 是一个编译函数(如下),而 args 是一个包含我的 Thing 对象的 1 元素列表。
Javascript:
thing.foo() 的输出有效,但所有其他输出在 Javascript 中解析为“foreign {}”。它们在地图中都没有任何值。
如何获取在 graal.js Javascript 代码(最好是原生到 Javascript)中可见的 JVM 上创建的 Map 数据?
java - 等价于 graal.js 脚本引擎中的 Nashorn 的 importPackage
我正在将旧代码从 JDK 8 迁移到 JDK 12。
在这个过程中,我注意到使用脚本引擎importPackage时不存在。用于脚本引擎"graal.js"时存在。"javascript"
有什么方法可以实现相同的功能"graal.js"吗?GraalJS 存储库上的 Nashorn 迁移文档没有涵盖这一点。
javascript - 用 graalVM 替换 nashorn
我正在将 Javascript 引擎从 Nashorn 迁移到 GraalVm,但无法实例化 GraalJSScriptEngine/ScriptEngine。我尝试了不同的方法:
我收到以下错误:
它在执行 ^ 时返回 null。ScriptEngineManager我还注意到实例中只有一个工厂(Nashorn) 。
我在类路径中添加了 truffle-api jar 并使用 VM 选项运行它:-ea -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -Dpolyglot.js.nashorn-compat=true
我在具有以下附加依赖项的 Java 13 上运行它:
graalvm - GraalVM Polyglot 无法加载 Java 类
想要从 Nashorn 迁移到 GraalVM。安装 Graal VM CE
测试应用
例外:
怎么了?
java - 在 GraalVM Polyglot 上下文中从 JavaScript 访问 Java 对象
在 GraalVM CE 上运行。
情况1:
结果:
为什么?
据我所知,d正确通过:
返回"HelloWorld"。
案例二:
例外
但是getName是公开的……怎么了?
java - 使用 graal.js 通过 Java 访问 JavaScript 数组
我正在将一个项目从 Nashorn 迁移到 graal.js。该项目使用了大量脚本(超过 3,400 个),并且在 Java 端有一个调用方法的函数;该方法返回一个 JavaScript 对象列表。
以前使用 ScriptUtils 在 Nashorn 上运行良好。这段代码是在我拿起它之前由从事该项目的开发人员编写的:
如何使用 graal.js 通过 Java 访问数组?我试过使用Value.asValue(p)as(MyObj[])无济于事。我还尝试遵循 Nashorn 迁移指南,他们建议将对象转换为 List 或 Map,但也无济于事。
我知道一个解决方案,我必须重写脚本以仅使用new Java.type('java.util.ArrayList');并返回 aList而不是数组 - 但是有成千上万的脚本,重写所有脚本将非常乏味。