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