python如何調(diào)用java類
由于 python 本身為腳本語言,且經(jīng)常存在調(diào)用第三方庫的情況,有的時候用 java 調(diào)用 python 不如用 python 調(diào)用 java 方便。下面就整理一下在 python 調(diào)用 java 過程中需要哪些操作。(默認是 linux 的 Ubuntu 上調(diào)用)
首先 linux 上的 jdk 是一定需要安裝的,這個過程在這里就不表了,python 都是 linux 自帶的,這里默認是 python2.7。
安裝 jpype
python 調(diào)用 java 主要是靠在 python 中 import jpype 來實現(xiàn)的。
jpype 的安裝極其容易,在 http://jpype.sourceforge.net/ 中下載 JPype-0.5.4.2.zip 并將它放置到隨便一個文件夾下,筆者給放到了/home/UsrName/jpype/ 下面,然后在該文件夾下:
unzip Jpype-0.5.4.2.zip cd Jpype-0.5.4.2 python setup.py install
就安裝完成了(如果有報 Permission denied 的錯誤,請把最后一個指令改為 sudo python setup.py install),此時可在 python 中執(zhí)行:
#python >>>import jpype >>>
Jpype 安裝完成。
利用 Jpype 調(diào)用 Java
我們就簡單調(diào)用 java 中自定義函數(shù)來舉例:
先附上簡單的 java 代碼,作用是給定字符串返回加工后的字符串,以及給定兩個參數(shù)返回兩數(shù)之和。
public class JpypeDemo { public static String sayHello(String user){ //注意!作為被 python調(diào)用的接口函數(shù),需要是靜態(tài)的,否則 python 端會報錯 return "hello" + user; } public static int calc(int a, int b){ //注意!作為被 python 調(diào)用的接口函數(shù),需要是靜態(tài)的,否則 python 端會報錯 return a + b; } public static void main(String[] args){ } }
將其打包為 jar 文件,這里我將打包好的文件命名為 JpypeDemo.jar(不會打包的小伙伴請百度),并將其放置于 python 腳本所在的目錄下。
然后再給出 python 端使用 java 的 jar 包的代碼:
import jpype from jpype import * import os.path jarpath = os.path.abspath('.') #這個函數(shù)用來獲取當前 python 腳本所在的絕對路徑 startJVM("/usr/local/java/jdk1.8.0_181/jre/lib/amd64/server/libjvm.so", "-ea", "-Djava.class.path=%s" % (jarpath + '/JpypeDemo.jar'))
這個 startJVM 函數(shù)作用是加載 Java 虛擬機,其第一個參數(shù)必須是你的 Java 的 jdk 的安裝位置,每個人的安裝位置不一樣,我的地址就是上面加粗的那一段(注?。?!有的教程上說可以直接通過 getDefaultJVMPath() 函數(shù)獲取 Java 地址,不建議用!不建議用!不建議用!因為這個函數(shù)獲得的地址很有可能是電腦自帶的 oracle 版的 Java,并非我們自己安裝的 Java,這樣由于環(huán)境變量的問題會導致報錯?。? 第二個參數(shù)意譯不明,反正加上就對了 ; 第三個參數(shù)是你打包好的 jar 包所在的絕對路徑,可以看到我將 JpypeDemo.jar 和前面所得到的當前目錄的路徑結(jié)合起來
JDClass = JClass("JpypeDemo") #申請一個 Java 類(神奇~) jd = JDClass jprint = java.lang.System.out.println #申請 Java 輸出類的輸出函數(shù) jprint( jd.sayHello(" waw ") ) #調(diào)用該類中的 sayHello 函數(shù),并用 Java 輸出函數(shù)打印 Java 返回值 jprint( jd.calc(2, 4) ) #調(diào)用該類中的求和函數(shù),并用 Java 輸出函數(shù)打印 Java 返回值 #關閉 Java 虛擬機,可寫可不寫,不寫會在程序結(jié)束時自動關閉 shutdownJVM()
執(zhí)行上述程序,得到輸出:
hello waw
6
JVM activity report:
classes loaded: 32
JVM has been shutdown
內(nèi)容擴展:
python調(diào)用java的jar包方法
from jpype import * jvmPath = getDefaultJVMPath() jars = ["./Firstmaven-1.0-SNAPSHOT-jar-with-dependencies.jar"]jvm_cp = "-Djava.class.path={}".format(":".join(jars)) startJVM(jvmPath,jvm_cp) sedisObj = JClass("LogBack") so = sedisObj() print so.get_v('name0') print so print so.get_int() shutdownJVM()
到此這篇關于python如何調(diào)用java類的文章就介紹到這了,更多相關python調(diào)用java類的方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python按條件刪除Excel表格數(shù)據(jù)的方法(示例詳解)
本文介紹基于Python語言,讀取Excel表格文件,基于我們給定的規(guī)則,對其中的數(shù)據(jù)加以篩選,將不在指定數(shù)據(jù)范圍內(nèi)的數(shù)據(jù)剔除,保留符合我們需要的數(shù)據(jù)的方法,感興趣的朋友跟隨小編一起看看吧2024-08-08python自動計算圖像數(shù)據(jù)集的RGB均值
這篇文章主要為大家詳細介紹了python自動計算圖像數(shù)據(jù)集的RGB均值,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06Python的Flask框架中集成CKeditor富文本編輯器的教程
在用Flask搭建網(wǎng)站時的后臺文章編輯器可以使用CKeditor,CKeditor所支持的文本樣式較多且開源,這里我們就來看一下Python的Flask框架中集成CKeditor富文本編輯器的教程2016-06-06Python??Flask框架操作數(shù)據(jù)庫的方法
Flask中最方便用的數(shù)據(jù)庫框架是flask_sqlalchamy,是對?SQLAlchamy?在?Flask?中的擴展,它主要在于簡化Flask?中?sqlalchamy的使用,本篇文章給大家介紹Python??Flask的數(shù)據(jù)庫操作使用方法,感興趣的朋友一起看看吧2024-02-02Python 將RGB圖像轉(zhuǎn)換為Pytho灰度圖像的實例
下面小編就為大家?guī)硪黄狿ython 將RGB圖像轉(zhuǎn)換為Pytho灰度圖像的實例。具有很好的參考價值。希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11