node.js调用jar包

61 阅读1分钟
  1. 安装依赖

github java 库 github.com/joeferner/n…

npm i java
// window 需提前安装
npm install --global --production windows-build-tools
  1. 直接引入jar包
const java = require("java");

java.classpath.push("./jar/epochcloud-flightDataAnalysisTools.jar");
  1. 调用jar包静态方法
// //调用静态方法:传递整数数组
const ArrayExample = java.import("cn.net.epoch.MyClass");
const intArray = java.newArray("int", [1, 2, 3, 4, 5]); // 创建 Java 熱数数组
const sumResult = ArrayExample.sumArrayStaticSync(intArray);
console.log("Sum of array(static):", sumResult);
  1. 调用实例方法:传递字符串数组
const instance = new ArrayExample(); // 创建实例
const stringArray = java.newArray("java.lang.String", [
  "Hello",
  "World",
  "Node.js",
]); // 创建 Java 字符串数组
const joinResult = instance.joinArrayInstanceSync(stringArray); // 调用实例方法
console.log("Joined array (instance):", joinResult);
  1. java对应代码
package cn.net.epoch;

public class MyClass {

    // 静态方法
    public static String sayHelloStatic(String name) {
        return "Hello (static), " + name + "!";
    }

    // 实例方法
    public String sayHelloInstance(String name) {
        return "Hello (instance), " + name + "!";
    }

    // 静态方法:计算整数数组的总和
    public static int sumArrayStatic(int[] numbers) {
        int sum = 0;
        for (int num : numbers) {
            sum += num;
        }
        return sum;
    }

    // 实例方法:将字符串数组连接为一个字符串
    public String joinArrayInstance(String[] strings) {
        return String.join(", ", strings);
    }
}
  1. 其他 使用的方法官网示例都有,electron 使用的时候 会有奇奇怪怪的问题,可换成node-java-bridge 是用rust写的, node-java-bridge在打包不同平台时,需在作者仓库拷贝,对应平台的包,然后设置asarUnpack,将所有包打进去。
 asarUnpack: [
  "node_modules/java-bridge/**",
  "node_modules/java-bridge-*/**",
],