JPype1
在软件开发过程中,有时需要在 Python 项目中利用既有的 Java 代码,已达到节省时间和开发成本的目的。因此,找到一个 Python 代码调用 Java 代码的桥梁是非常有意义的。 JPype 就是这样的一个第三方库,利用它可以使 Python 程序方便的调用 Java 代码,从而扩充 Python 语言的能力,弥补 Python 语言的不足。
一、下载安装。
pip3 install JPype1-py3 #python2.7 有自己单独的JPype1库,与python3的库不一致。
PS: 另外需要注意的点:
1、需要下载好JDK,且版本要大于1.7,配置好环境变量JAVA_HOME。
2、如果JDK 是64 Bit,python解释器要64Bit (或者都是32 Bit)版本不一致会导致JVM运行时内存泄漏报异常:Process finished with exit code -1073741819 (0xC0000005)
二、示例:
a 、定义Java Test类。更改文件名为.java后缀。
1、通过javac xxx.java 可将java 文件编译成xxx.class文件。 2、通过jar cvf xxxx(自定义命名).jar xxx.class 可将.class 文件打包成jar包
public class Test{ /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } public int getSum(int a,int b){ System.out.println("int"); return a+b; } public String getString(String str){ System.out.println("String"); return str+"&&&&&"+str; } }
b、JPype 操作使用:
import jpype # 指定jar包位置, 或者.class文件 class_path = 'E:/SinaifMock/utils/Test.class' jar_path = "E:\create_TestAccount/test.jar" # JVM的路径位置 JVM_path = "E:/java/jdk1.8.0_121/jre/bin/server/jvm.dll" # 开启JVM,且指定jar包, 或者.class文件位置 jpype.startJVM(JVM_path, jar_path) # 打印hello, word jpype.java.lang.System.out.println("hello World") # 引入java程序中的类.路径应该是项目中的package包路径.类名 javaClass = jpype.JClass('Test') # 创建一个对象 javaInstance = javaClass() # 执行类中的函数了 num = javaInstance.getSum(10, 20) string = javaInstance.getString("getString") print(num, string) # 关闭JVM jpype.shutdownJVM()
输出:
hello World int String 30 getString&&&&&getString JVM activity report : classes loaded : 32 JVM has been shutdown