《原創不易,轉載請標明出處:https://www.cnblogs.com/bandaobudaoweng/p/10785766.html》
前言
開發Python程序,需求中需要用到Java代碼,Python作為“膠水”語言能夠很好的實現這種需求。具體實現的過程如下:
1.環境准備
2.環境搭建
3.實驗
1.環境准備
我實驗過的兩種搭配,都成功了,其他的搭配方式沒有實驗過不敢做過多的陳述,這里以搭配一為實驗基礎進行描述。
搭配一:windows 7(64位)+JDK(32位)+Python(32位)+eclipse+pycharm
搭配二:windows 7(64位)+JDK(64位)+Python(64位)+eclipse+pycharm
光有以上的還不夠,還需要一個作為橋梁的工具包,jpype1,這個工具包可以啟動jvm,使java代碼依然運行在jvm中。
實驗過程中使用的各個工具的具體版本如下:
JDK(32位):1.8.0_211
Python(32位):3.7.2
jpype1(32位):0.6.3
eclipse+pycharm是兩款開發工具,主要用來編寫java和python代碼
2.環境搭建
1.這里對JDK還有python的安裝不做過多的稱述。
2.jpype1的安裝:
①:使用python自帶的pip安裝工具在線安裝,發現不能正確安裝,提示需要Microsoft Visual C++等,放棄。
②:使用python自帶的pip安裝工具離線安裝,可以正確安裝,但是問題來了,離線的安裝包在哪里獲取?如下鏈接可以獲取,jpype1(32位):0.6.3。
鏈接:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype
如圖:下載對應自己python版本的離包(可以在cmd中鍵入 python命令查看python版本)(這里我選擇倒數第二個,命名中帶有amd64是適應python64位的,沒有amd64的是適應python32位的)
得到離線包之后,在cmd中使用命令: pip install 離線包的位置 可以順利安裝。(這里我已經安裝過了沒有截圖,也懶得重新卸載再安裝了)
3.實驗
工具安裝完畢之后,接下來看實驗代碼如何書寫,借助eclipse開發java代碼,並打jar包。
①:開發java代碼
②:打jar包
經過打jar包之后,獲得了jar文件。
③開發python程序
# 引入jpype模塊 import jpype import os if __name__ == '__main__': """ 基本的開發流程如下: ①、使用jpype開啟jvm ②、加載java類 ③、調用java方法 ④、關閉jvm(不是真正意義上的關閉,卸載之前加載的類) """ # ①、使用jpype開啟虛擬機(在開啟jvm之前要加載類路徑) # 加載剛才打包的jar文件 jarpath = os.path.join(os.path.abspath("."), "C:\\Users\\Administrator\\Desktop\\pythoncalljava-1-0-0.jar") # 獲取jvm.dll 的文件路徑 jvmPath = jpype.getDefaultJVMPath() # 開啟jvm jpype.startJVM(jvmPath,"-ea", "-Djava.class.path=%s" % (jarpath)) # ②、加載java類(參數是java的長類名) javaClass = jpype.JClass("com.pythoncalljava.JavaClass") # 實例化java對象 # javaInstance = javaClass() # ③、調用java方法,由於我寫的是靜態方法,直接使用類名就可以調用方法 javaClass.show() # ④、關閉jvm jpype.shutdownJVM() pass
④運行程序
總結:
1.如果是調用多個jar文件的話,要在jvm啟動時指定jar文件路徑,
jarpath,jarpath2,jarpath3,jarpath4是jar文件路徑。
jpype.startJVM(jvmPath,"-ea", "-Djava.class.path=%s;%s;%s;%s" % (jarpath,jarpath2,jarpath3,jarpath4))
2.實際上沒有真正的停止jvm,jvm隨着python程序的退出而結束(JVM has been shutdown是指卸載之前加載的類。)