python调用java的jar包_使用 jpype 库实现 Python 调用 java 的 jar 包中的功能

一、what's the JPype

JPype 是一个能够让 python 代码方便地调用 Java 代码的工具。在某些时候 java 的能力更强,我们可以用 java 写一个模块的功能然后用 Python 去调用。当然相应的也可以反着来,Java 使用 jython 调用Python

JPype与Jython(JPython后继者)的区别?

运行环境不同:jython 运行在 jvm 上,而JPype 的实际运行环境仍然是 python runtime,只是在运行期间启动了一个嵌入的jvm;

使用者不同:jython 用于 Java ,JPype 用于 Python。

JPype安装

本人尝试过直接使用 pip3 install JPype1-py3 的形式,但貌似这样安装的版本不是很好,建议使用 wheel 进行安装

在网页中找到 jpype,我使用的版本是 Python3,下载的 wheel 是 JPype1‑0.6.3‑cp36‑cp36m‑win_amd64.whl

pip install xxx.wheel

pip install numpy#jpype 依赖于 numpy

二、Java 的安装及 IDE 的安装

最好是 jar 文件在本地打包,本地开发,所以需要有 Java 的环境。不需要安装的自行跳过。

注意:Python 和JDK 版本需要一致,比如都是 64 bit

配置 Java 环境

下载 JDK 文件版,本要大于1.7,官网:

配置系统变量 JAVA_HOME:变量名 JAVA_HOME,值为 jdk 所在目录

配置系统变量 CLASSPATH:变量名 CLASSPATH,值为 ;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

配置环境变量 PATH:%JAVA__HOME%\bin;%JAVA_HOME%\jre\bin

cmd 中输入 java -version 能看到版本号就说明 OK 了

安装 IDE

下载完成后,打开,File→new→java project,取消默认勾选的项目,点击finish

右键src,new→class,输出name,写一个 Java 的小脚本(演示的脚本文件命名为 JpypeDemo.java)

public classJpypeDemo {public int calc(int a, intb) {return a+b;

}public static voidmain(String[]args) {

JpypeDemo JpypeDemo= newJpypeDemo();int a =JpypeDemo.calc(1,2);

System.out.print(a);

}

}

将 Java 脚本打包成 jar 包

将 Java 脚本编译成 class 文件

javac JpypeDemo.java # 会生成一个class文件

打包成 jar 包

jar cf Demo.jar JpypeDemo.class

使用 JPype

importjpypeimportos

JVM_path= r"C:\Program Files\Java\jdk1.8.0_221\jre\bin\server\jvm.dll" #jvm.dll 是必须的,在jdk文件夹jre\bin\server\jvm.dll下

jarpath =r'C:\Users\zhuminghui\Desktop\demo_test\Demo.jar' #生成的 jar 包路径

Djava= "-Djava.class.path="+jarpath

jpype.startJVM(JVM_path,"-ea",Djava)

jpype.java.lang.System.out.println("HelloWorld") #测试调用 Java 的环境 print

JDClass =jpype.JClass("JpypeDemo") #jar 包中,Java 脚本中定义的类

jd = JDClass() #实例化

print(jd.calc(1,2)) #调用方法#关闭JVM

jpype.shutdownJVM()

注意:jvm 只能启动一次,关闭一次,否则会报错。

坑点记录

如果 Java 脚本第一行声明了 package,在调用 JClass 实例化的时候需要做下更改

packageaaapublic classJpypeDemo {public int calc(int a, intb) {return a+b;

}public static voidmain(String[]args) {

JpypeDemo JpypeDemo= newJpypeDemo();int a =JpypeDemo.calc(1,2);

System.out.print(a);

}

}

importjpypeimportos

JVM_path= r"C:\Program Files\Java\jdk1.8.0_221\jre\bin\server\jvm.dll" #jvm.dll 是必须的,在jdk文件夹jre\bin\server\jvm.dll下

jarpath =r'C:\Users\zhuminghui\Desktop\demo_test\Demo.jar' #生成的 jar 包路径

Djava= "-Djava.class.path="+jarpath

jpype.startJVM(JVM_path,"-ea",Djava)

jpype.java.lang.System.out.println("HelloWorld") #测试调用 Java 的环境 print

JDClass =jpype.JClass("aaa.JpypeDemo") #jar 包中,Java 脚本中定义的类

jd = JDClass() #实例化

print(jd.calc(1,2)) #调用方法#关闭JVM

jpype.shutdownJVM()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值