在Python程序中調用Java代碼的實現


 《原創不易,轉載請標明出處: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是指卸載之前加載的類。)

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM