您的位置 首页 java

NodeJS 调用Java

nodejs 调用 java 的原理:

nodejs-java运行原理:使用 c++ 通过 jvm ti JNI去调用java的类,nodejs再调用c++,用c++做中转实现的一个功能。 JNI 是java本地开发接口,JNI 是一个协议,这个协议用来沟通java代码和外部的本地代码(c/c++),通过这个协议,java代码就可以调用外部的c/c++代码,外部的c/c++代码也可以调用java代码,Android系统源码中随处可见JNI的使用”

NodeJs调用Java注意事项:

1)使用cnpm减少安全的信息

2)使用JDK1.8,并且避免32位的 JDK 报错

详细代码:

index.js内容:

 var java = require ('java');

var fs = require("fs");

var list = java.newInstanceSync("java.util.ArrayList");

list.add("Hello world");
list.add("List2");

console.log(list.sizeSync());
console.log(list.toStringSync());

  

paskage.json

 {
  "name": "nodejavademo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "java": "^0.12.2",
    "node-java-maven": "^0.1.2"
  }
}
  

Java依赖管理:

 "use strict";

var fs = require("fs");

var java = require("java");

var baseDir = "./target/dependency";

var dependencies = fs.readdirSync(baseDir);

?

dependencies.forEach(function(dependency){

java. classpath .push(baseDir + "/" + dependency);

})

?

java.classpath.push("./target/classes");

java.classpath.push("./target/test-classes");

?

exports.getJavaInstance = function() {

return java;

}

var java = require("java");

java.classpath.push("commons-lang3-3.1.jar");

java.classpath.push("commons-io.jar");



var list1 = java.newInstanceSync("java.util.ArrayList");

console.log(list1.sizeSync()); // 0

list1.addSync(‘item1‘);

console.log(list1.sizeSync()); // 1



java.newInstance("java.util.ArrayList", function(err, list2) {

list2.addSync("item1");

list2.addSync("item2");

console.log(list2.toStringSync()); // [item1, item2]

});



var ArrayList = java.import(‘java.util.ArrayList‘);

var list3 = new ArrayList();

list3.addSync(‘item1‘);

list3.equalsSync(list1); // true
  

执行结果

文章来源:智云一二三科技

文章标题:NodeJS 调用Java

文章地址:https://www.zhihuclub.com/186307.shtml

关于作者: 智云科技

热门文章

网站地图