本文介绍: 至此,js调用java示例介绍完了,其实尝试时候,觉着可能有一些神秘,但是当我们了解了之后,发现,就是一个混合调用过程需要我们熟悉java语言,也要熟悉javascript,这种调用没有太大的意义,因为很多事情java可以做,node同样可以做,而且这种调用环境非常复杂,不仅需要jdk,还需要msbuild,就是c源码编译,对机器环境要求较高。有了上面的环境准备,接着就可以安装nodejava依赖了。然后,运用node.js调用准备一个Test.java

1、业务需要

最近因项目需求需要调用第三方java的打的jar包,但项目后端是用node.js写的,因此需要node.js调用第三方jar,网上搜集资料,发现一个库,nodejava可以通过js方式调用java语言的包,以及包中的方法,因此整理了一下,以防时间长忘记,具体如下

2、开发环境

有了上面的环境准备,接着就可以安装nodejava依赖了。

 npm install java --save
一步会进行源码编译,所以会自动运行node-gyp,接着利用系统中的msbuild进行源码编译没有报错安装成功了。如果编译安装java依赖失败,回头检查msbuild,jdk安装情况。

3、调用java包简单实例

const java = require("java")
var javaLangSystem = java.import("java.lang.System")
javaLangSystem.out.printlnSync("hello") //hello
var list1 = java.newInstanceSync("java.util.ArrayList")
list1.addSync("a")
list1.addSync("b")
console.log(list1.toStringSync()) //[a,b]
console.log(list1.sizeSync())//2
console.log(list1.getSync(1))//b
 
var ArrayList = java.import("java.util.ArrayList")
var list2 = new ArrayList()
list2.addSync("a")
list2.addSync("b")
console.log(list2.toStringSync()) //[a,b]
console.log(list2.sizeSync())//2
console.log(list2.getSync(1))//b

运行程序打印信息如下
在这里插入图片描述
以上示例演示了js调用java原生方法,很多方法在调用的时候,与java有一些区别方法后面都带着Sync后缀表示同步方法,也好理解node很多操作都是异步的,要想直接得到结果,就需要调用同步方法,就好比在进行文件操作那样:fs.readSync(),fs.mkdirSync() 。

4、调用自定的jar接口

准备一个Test.java

package com.xxx;
public class Test{
    public static String hello(String name){
        return "hi,"+name;
    }
}

编译,打jar包。
然后将jar放到jdk环境的java_home的jrelibeext文件下,相当于把自己打的jar包放到java开放环境中去,在调用的时候引jar包时候引入jar路径可以不用在写了,我本地路径是:

C:Program FilesJavajdk1.8.0_191jrelibext

然后,运用node.js调用

调用方法

const java = require("java") //应用java模块
java.classpath.push(".")  //jar包路径(如果jar包放在了jrelibext文件下,用'.'表示可以了,或者写jar包的绝对路径)

方法一:
var Test = java.import("com.xxx.Test")  //引入包路径
var res = Test.helloSync("buejee")      //调用jar中的方法,传入参数

方法二:
let res = java.callStaticMethodSync("com.xxx.Test","hello","buejee");
//第一个参数包路径,第二个参数方法名,第三参数是传入接口参数

console.log(res)

运行结果如下
在这里插入图片描述
至此,js调用java示例介绍完了,其实尝试时候,觉着可能有一些神秘,但是当我们了解了之后,发现,就是一个混合调用的过程需要我们熟悉java语言,也要熟悉javascript,这种调用没有太大的意义,因为很多事情java可以做,node同样可以做,而且这种调用环境非常复杂,不仅需要jdk,还需要msbuild,就是c源码编译,对机器环境要求较高。

注意:引入jar包路径时候,不要用相对路径,我尝试相对路径引用没有成功,具体原因可能是下面调用包的路径,不支持相对路径。可以将jar包方到<java_home>jrelibext下面或者用绝对路径

原文地址:https://blog.csdn.net/zch981964/article/details/131479978

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_31382.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注