javascript - 如何在 Graal.js 中使用自定义 java 类型
问题描述
我已经将一个电话类存储在一个 java 文件中,并将它添加到一个静态 Web 项目的IntelliJ
想法中。另外,我在项目中创建了 App.js 文件并尝试node js
使用以下方法在 GraalVM 下调用纯函数: graalvm/.../node -jvm -polyglot ~/source/graalvm_samples/graal_vm_sample_js/app.js 但GraalVM下的 nodejs 失败以下错误:“不允许访问主机类电话或不存在。”
应用程序.js
javascript 与 JavaCode 的混合
console.log("Hello NodeJs");
var Phone = Java.type('graalSample.Phone');
let phone = new Phone(12345);
console.log(phone.number);
console.log(phone.call('Someone'));
电话类:
package graalSample;
public class Phone {
public final int number;
public Phone(int number){
this.number = number;
}
public void call(String name){
System.out.printf("Calling ... "+name);
}
}
Sametime,以下具有标准 java 类型的代码可以正常工作。从这里借用Graal.js 中的 java 类
应用程序.js
var ArrayList = Java.type("java.util.ArrayList");
var myList = new ArrayList();
myList.add("hello");
myList.add("world");
print(myList);
解决方案
事实证明,我错过了 --jvm.cp 参数并且没有在节点运行之前构建 myClass.java 。所以,这是一个可行的解决方案。目录中的文件:
./src/graalSample/Phone.java
./src/App.js
源问题的包名称也有错误。该包必须从graal_vm_sample_js重命名 为graalSample。
在运行 App.js 文件之前,我运行了
javac -d ./out/production/graal_vm_sample_js/ ./src/graal/Phone.java
结果,类文件被创建并可供 Graal 使用。
node --jvm --jvm.cp="/Users/myuser/source/graalvm_samples/graal_vm_sample_js/out/production/graal_vm_sample_js" /Users/myuser/source/graalvm_samples/graal_vm_sample_js/out/production/graal_vm_sample_js/App.js
输出看起来像
12345
Calling ...someone
推荐阅读
- javascript - react.js的render方法中未定义的json元素
- wpf - 使网格中的图像大小相同
- scala - 如何从 sbt/apache flink 项目的资源文件夹中打开文件
- powershell - 从命令行/包管理器/powershell 控制 Visual Studio 2017
- javascript - 在移动 Firefox 中单击电话链接时的事件
- angular - Angular Material Paginator 未定义
- c# - 带参数的 C# 方法
- node.js - 使用 express 在 NodeJs 应用程序中发出 GET 请求
- html - HTML画布根据输入文本更改文本
- c - C中结构的动态内存分配问题