python調用第三方java包實例


先看結果:

對於python與java的互調,我一開始是用的py4j,但是后來發現在使用方法的時候,不知道如何在python中導入jar包,然后網上的資料也比較少。后來想不出來辦法,又看到有Jpype這個東東。博友們說Jpype的安裝比較不好安裝,容易出錯,建議用whl文件安裝,我這里pip install jpype,倒是沒出現問題,很快就下載好了。
先說一下Jpype,它是一個讓python 代碼方便地調用 Java 代碼的工具,從而克服了 python 在某些領域(如服務器端編程)中的不足。

python端:

os.path.abspath這個函數用來獲取當前 python 腳本(即py文件)所在的絕對路徑, startJVM是用來開啟JVM的,啟動java虛擬機,所以在后續的任何 JAVA 代碼被調用前,必須先調用此方法啟動 Java虛擬機。其中,jvm,用於描述你系統中 jvm.dll 文件所在的路徑,這個可以利用函數getDefaultJVMPath()獲得。"-Djava.class.path=%s"% jarpath,此處非常關鍵,能實現在 python 代碼中調用第三方Java 擴展包。(這里需要你把jar文件拷貝到python腳本文件的目錄下。相應地,jpype.shutdownJVM() 用來關閉 JVM,該函數沒有輸入參數。當 python 程序退出時,JVM 會自動關閉。JDClass = JClass("basicTools.MathFuns") 是申請一個java類,用來調用方法。
代碼:
'''

import jpype
from jpype import *

import os.path

jarpath=os.path.join(os.path.abspath('.'),"MathFuns.jar")#os.path.abspath這個函數用來獲取當前 python 腳本所在的絕對路徑

print(os.path.abspath('.'))
startJVM(getDefaultJVMPath(),"-ea","-Djava.class.path=%s"% jarpath)#"D:/jdk/jre/bin/server/jvm.dll"

JDClass = JClass("basicTools.MathFuns") #申請一個java類
jd = JDClass()#實例化
jprint = java.lang.System.out.println    #申請 Java 輸出類的輸出函數
jprint("hello World")

jprint(jd.isEqual([1,2,3],[1,4,3]))#調用類的isEqual方法,判斷兩個數組是否相等
jpype.shutdownJVM()#關閉JVM

java端:

我下載了客戶端eclipse,然后將MathFuns包導入在項目中,導入以后,就位於Referenced Libraries文件夾中了,如圖所示:
。應該這樣導入就好了,點開,可以看到有文件夾basicTools,MathFuns類。說到這里,我之前運行python端的時候出現了總是找不到MathFuns類的錯誤,找了很久都沒有解決。最后竟然在類的前面加了basicTools,才解決了這個錯誤。所以,這里需注意,看看你是否有這樣的一個文件夾。如果有,那就加上,如果沒有,那就直接在申請java類的時候,直接寫類名就好。


免責聲明!

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



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