成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python如何調(diào)用java類

瀏覽:111日期:2022-07-18 15:34:59

由于 python 本身為腳本語(yǔ)言,且經(jīng)常存在調(diào)用第三方庫(kù)的情況,有的時(shí)候用 java 調(diào)用 python 不如用 python 調(diào)用 java 方便。下面就整理一下在 python 調(diào)用 java 過(guò)程中需要哪些操作。(默認(rèn)是 linux 的 Ubuntu 上調(diào)用)

首先 linux 上的 jdk 是一定需要安裝的,這個(gè)過(guò)程在這里就不表了,python 都是 linux 自帶的,這里默認(rèn)是 python2.7。

安裝 jpype

python 調(diào)用 java 主要是靠在 python 中 import jpype 來(lái)實(shí)現(xiàn)的。

jpype 的安裝極其容易,在 http://jpype.sourceforge.net/ 中下載 JPype-0.5.4.2.zip 并將它放置到隨便一個(gè)文件夾下,筆者給放到了/home/UsrName/jpype/ 下面,然后在該文件夾下:

unzip Jpype-0.5.4.2.zipcd Jpype-0.5.4.2python 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

我們就簡(jiǎn)單調(diào)用 java 中自定義函數(shù)來(lái)舉例:

先附上簡(jiǎn)單的 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 jpypefrom jpype import *import os.pathjarpath = os.path.abspath(’.’) #這個(gè)函數(shù)用來(lái)獲取當(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è)人的安裝位置不一樣,我的地址就是上面加粗的那一段(注?。。∮械慕坛躺险f(shuō)可以直接通過(guò) getDefaultJVMPath() 函數(shù)獲取 Java 地址,不建議用!不建議用!不建議用!因?yàn)檫@個(gè)函數(shù)獲得的地址很有可能是電腦自帶的 oracle 版的 Java,并非我們自己安裝的 Java,這樣由于環(huán)境變量的問(wèn)題會(huì)導(dǎo)致報(bào)錯(cuò)?。? 第二個(gè)參數(shù)意譯不明,反正加上就對(duì)了 ; 第三個(gè)參數(shù)是你打包好的 jar 包所在的絕對(duì)路徑,可以看到我將 JpypeDemo.jar 和前面所得到的當(dāng)前目錄的路徑結(jié)合起來(lái)

JDClass = JClass('JpypeDemo') #申請(qǐng)一個(gè) Java 類(神奇~)jd = JDClassjprint = 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 soprint so.get_int()shutdownJVM()

到此這篇關(guān)于python如何調(diào)用java類的文章就介紹到這了,更多相關(guān)python調(diào)用java類的方法內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章: