python调用Java程序完整教程
背景
python作为一种脚本语言,有时候需要调用Java程序完成特定功能,本文主要介绍如何在python中调用Java程序。
python调用Java完整步骤
1.安装jpype库
python调用Java主要依赖jpype库:import jpype,因此首先需要在python环境中安装jpype库。
关于jpype的介绍和使用说明参考:https://www.cnblogs.com/victory-0315/p/8617750.html
笔者根据常见情景提供如下几种安装方式:
(1)使用pip安装:pip install jpype1
(2)如果配置了anaconda环境,使用:conda install jpype1
(3)ubuntu环境安装命令:sudo apt-get install python-jpype
(3)手动安装:在链接中手动下载安装包: http://jpype.sourceforge.net/,放置到某路径下,进入该路径下,解压压缩包,然后python setup.py install手动安装。
验证是否安装成功了jpype: 在python环境下,import jpype是否成功。
2.编写Java程序,并打包为jar文件
编写Java程序文件,例如求两个数和的方法:
public class AddTwoNumsClass {
public static int addTwoNumsFunc(int a, int b) { // 作为被python调用的接口函数,必须得是静态的,否则python端会报错
return a + b;
}
}
将Java程序打包成jar包文件,使用工具IntelliJ IDEA,打包方法参考百度经验:https://jingyan.baidu.com/article/c275f6ba0bbb65e33d7567cb.html
假设打包好的jar文件名为:AddTwoNumbers.jar,将其放置在python脚本所在的位置。
3.python脚本中调用Java程序
在python中调用Java接口的程序如下:
import jpype
import os
jar_path = os.path.abspath('.') + '/AddTwoNumbers.jar' # 获取jar包绝对路径
jpype.startJVM('usr/local/java/jdk.../jre/lib/amd64/server/libjvm.so', '-ea', '-Djava.class.path=%s' % jar_path) # 加载java虚拟机,第一个参数是Java的jdk安装位置,可以通过env | prep JAVA_HOME来查看;第二个参数仿照例子来写;第三个参数为jar包的绝对路径;
java_class = jpype.JClass('AddTwoNumsClass') # 通过输入类名称来获取指定的Java类
result = java_class.addTwoNumsFunc(1, 2) # 通过函数名称来调用该类的指定函数
jpype.shutdownJVM() # 关闭Java虚拟机,如果不写会在python程序退出时自动关闭
如上所述,就可以在python中调用Java的指定函数了。
4.补充
(1)Java函数是静态函数时,可通过类直接调用,否则需要实例化Java对象后才能调用
java_class = jpype.JClass(‘ClassName’) # 获取Java类
java_instance = java_class() # 实例化对象
java_instance.funcName() # 通过对象调用函数
(2) 如果需要调用多个jar包文件的话,在启动jvm虚拟机时,指定多个jar包文件路径即可,如下:
jpype.startJVM(jvmPath, ‘-ea’, ‘-Djava.class.path=%s;%s;%s’ % (jarPath1, jarPath2, jarPath3))