python如何調(diào)用java類
由于 python 本身為腳本語言,且經(jīng)常存在調(diào)用第三方庫的情況,有的時(shí)候用 java 調(diào)用 python 不如用 python 調(diào)用 java 方便。下面就整理一下在 python 調(diào)用 java 過程中需要哪些操作。(默認(rèn)是 linux 的 Ubuntu 上調(diào)用)
首先 linux 上的 jdk 是一定需要安裝的,這個(gè)過程在這里就不表了,python 都是 linux 自帶的,這里默認(rèn)是 python2.7。
安裝 jpype
python 調(diào)用 java 主要是靠在 python 中 import jpype 來實(shí)現(xiàn)的。
jpype 的安裝極其容易,在 http://jpype.sourceforge.net/ 中下載 JPype-0.5.4.2.zip 并將它放置到隨便一個(gè)文件夾下,筆者給放到了/home/UsrName/jpype/ 下面,然后在該文件夾下:
unzip Jpype-0.5.4.2.zip cd Jpype-0.5.4.2 python setup.py install
就安裝完成了(如果有報(bào) Permission denied 的錯(cuò)誤,請(qǐng)把最后一個(gè)指令改為 sudo python setup.py install),此時(shí)可在 python 中執(zhí)行:
#python >>>import jpype >>>
Jpype 安裝完成。
利用 Jpype 調(diào)用 Java
我們就簡單調(diào)用 java 中自定義函數(shù)來舉例:
先附上簡單的 java 代碼,作用是給定字符串返回加工后的字符串,以及給定兩個(gè)參數(shù)返回兩數(shù)之和。
public class JpypeDemo {
public static String sayHello(String user){ //注意!作為被 python調(diào)用的接口函數(shù),需要是靜態(tài)的,否則 python
端會(huì)報(bào)錯(cuò)
return "hello" + user;
}
public static int calc(int a, int b){ //注意!作為被 python 調(diào)用的接口函數(shù),需要是靜態(tài)的,否則 python
端會(huì)報(bào)錯(cuò)
return a + b;
}
public static void main(String[] args){
}
}
將其打包為 jar 文件,這里我將打包好的文件命名為 JpypeDemo.jar(不會(huì)打包的小伙伴請(qǐng)百度),并將其放置于 python 腳本所在的目錄下。
然后再給出 python 端使用 java 的 jar 包的代碼:
import jpype
from jpype import *
import os.path
jarpath = os.path.abspath('.') #這個(gè)函數(shù)用來獲取當(dāng)前 python 腳本所在的絕對(duì)路徑
startJVM("/usr/local/java/jdk1.8.0_181/jre/lib/amd64/server/libjvm.so", "-ea",
"-Djava.class.path=%s" % (jarpath + '/JpypeDemo.jar'))
這個(gè) startJVM 函數(shù)作用是加載 Java 虛擬機(jī),其第一個(gè)參數(shù)必須是你的 Java 的 jdk 的安裝位置,每個(gè)人的安裝位置不一樣,我的地址就是上面加粗的那一段(注?。?!有的教程上說可以直接通過 getDefaultJVMPath() 函數(shù)獲取 Java 地址,不建議用!不建議用!不建議用!因?yàn)檫@個(gè)函數(shù)獲得的地址很有可能是電腦自帶的 oracle 版的 Java,并非我們自己安裝的 Java,這樣由于環(huán)境變量的問題會(huì)導(dǎo)致報(bào)錯(cuò)!); 第二個(gè)參數(shù)意譯不明,反正加上就對(duì)了 ; 第三個(gè)參數(shù)是你打包好的 jar 包所在的絕對(duì)路徑,可以看到我將 JpypeDemo.jar 和前面所得到的當(dāng)前目錄的路徑結(jié)合起來
JDClass = JClass("JpypeDemo") #申請(qǐng)一個(gè) Java 類(神奇~)
jd = JDClass
jprint = java.lang.System.out.println #申請(qǐng) Java 輸出類的輸出函數(shù)
jprint( jd.sayHello(" waw ") ) #調(diào)用該類中的 sayHello 函數(shù),并用 Java 輸出函數(shù)打印 Java 返回值
jprint( jd.calc(2, 4) ) #調(diào)用該類中的求和函數(shù),并用 Java 輸出函數(shù)打印 Java 返回值
#關(guān)閉 Java 虛擬機(jī),可寫可不寫,不寫會(huì)在程序結(jié)束時(shí)自動(dòng)關(guān)閉
shutdownJVM()
執(zhí)行上述程序,得到輸出:
hello waw
6
JVM activity report:
classes loaded: 32
JVM has been shutdown
內(nèi)容擴(kuò)展:
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()
到此這篇關(guān)于python如何調(diào)用java類的文章就介紹到這了,更多相關(guān)python調(diào)用java類的方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java直接調(diào)用python腳本的例子
- 匯總java調(diào)用python方法
- Python 調(diào)用Java實(shí)例詳解
- Java程序中實(shí)現(xiàn)調(diào)用Python腳本的方法詳解
- java 直接調(diào)用python腳本,并傳遞參數(shù)代碼實(shí)例
- python調(diào)用java的jar包方法
- Java調(diào)用Python腳本傳遞數(shù)據(jù)并返回計(jì)算結(jié)果
- Java調(diào)用python的方法(jython)
- Python和java?如何相互調(diào)用
- Java中調(diào)用Python的實(shí)現(xiàn)示例
相關(guān)文章
pytorch 實(shí)現(xiàn)tensor與numpy數(shù)組轉(zhuǎn)換
今天小編就為大家分享一篇使用pytorch 實(shí)現(xiàn)tensor與numpy數(shù)組轉(zhuǎn)換,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Python 數(shù)據(jù)結(jié)構(gòu)之十大經(jīng)典排序算法一文通關(guān)
排序算法可以分為內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存2021-10-10
Python簡單獲取二維數(shù)組行列數(shù)的方法示例
這篇文章主要介紹了Python簡單獲取二維數(shù)組行列數(shù)的方法,結(jié)合實(shí)例形式分析了Python基于numpy模塊的二維數(shù)組相關(guān)運(yùn)算技巧,需要的朋友可以參考下2018-12-12
[項(xiàng)目布局配置]Nosql與PythonWeb-Flask框架組合
本文主要描述了怎樣使用輕量級(jí)NoSQL數(shù)據(jù)庫與PythonWeb-Flask框架組合來進(jìn)行項(xiàng)目布局及應(yīng)用配置,需要的同學(xué)可以參考下,希望可以對(duì)大家有所進(jìn)益2021-08-08
Python利用pdfplumber實(shí)現(xiàn)讀取PDF寫入Excel
pdfplumber專注PDF內(nèi)容提取,例如文本(位置、字體及顏色等)和形狀(矩形、直線、曲線),還有解析表格的功能。本文主要為大家介紹如何利用pdfplumber實(shí)現(xiàn)讀取PDF寫入Excel,需要的可以參考一下2022-06-06
Python中的正則表達(dá)式與JSON數(shù)據(jù)交換格式
正則表達(dá)式 是一個(gè)特殊的字符序列,一個(gè)字符串是否與我們所設(shè)定的這樣的字符序列,相匹配快速檢索文本、實(shí)現(xiàn)替換文本的操作。這篇文章主要介紹了Python中的正則表達(dá)式與JSON ,需要的朋友可以參考下2019-07-07
Python numpy有哪些常用數(shù)據(jù)類型
Numpy提供了兩種基本的對(duì)象:ndarray(N-dimensional Array Object)和 ufunc(Universal Function Object)。ndarray是存儲(chǔ)單一數(shù)據(jù)類型的多維數(shù)組,而ufunc則是能夠?qū)?shù)組進(jìn)行處理的函數(shù)2023-02-02
pandas中的Timestamp只保留日期不顯示時(shí)間
這篇文章主要介紹了pandas中的Timestamp只保留日期不顯示時(shí)間,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07

