python調(diào)用java詳細教程

image.png

該項目打包成ajar.jar
AbsCore.java

package package_a;

public abstract class AbsCore {
    public String methodA() {
        return "methodA";
    }
    
    public String methodB() {
        return "methodB";
    }
}

C.java

package package_a;

public class C extends AbsCore {
}

D.java

package package_a;

public class D extends AbsCore {
    @Override
    public String methodA() {
        return "DA";
    }
    @Override
    public String methodB() {
        return "DB";
    }
}

ICore.java

package package_a;

public interface ICore {
    public String test();
}

AImpl.java

package package_a;

public class AImpl implements ICore {
    private String name = "A";

    public String test() {
        return name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

BImpl.java

package package_a;

public class BImpl implements ICore {

    public String test() {
        return "B";
    }

}
image.png

該項目打包成bjar.jar

Test.java

package package_b;

import package_a.*;

public class Test {
    public static String testStatic() {// 測試靜態(tài)方法 
        return "testStatic success.";
    }

    public void testVoid() {// 測試Void方法
        System.out.println("testVoid success.");
    }

    public String testString() {// 測試返回String的方法
        return "testString success.";
    }

    public String testString(String str) { //測試重載的方法
        return str;
    }

    public String testICore(ICore core) { //測試傳入java實例酥宴,以接口類型入?yún)?        return core.test();
    }

    public String testAbsCore(AbsCore core) { //測試傳入java實例螟加, 以抽象類型入?yún)?        return core.methodA();
    }

    public ICore testICore() { //測試返回接口類型的java實例
        AImpl a = new AImpl();
        a.setName("hello");
        return a;
    }

    public AbsCore testAbsCore() { //測試返回抽象類型的java實例
        D d = new D();
        return d;
    }
}
image.png

bjar.jar放在本目錄珠洗,ajar.jar放在其他目錄似将,模擬依賴問題壳坪。

usejar.py

# coding=utf-8
import jpype
import os
import platform

if __name__ == '__main__':
    jvm_path = jpype.getDefaultJVMPath()
    dependence_dirs = list()
    dependence_dirs.append(os.path.join(os.path.abspath("."))) # 當前目錄柳刮,所要使用的jar則放在該目錄
    dependence_dirs.append(r"/Users/apple/Desktop")  # 被依賴的jar所在的目錄,被依賴的目錄可能由多個砚著,自行append即可

    if platform.system() == "Windows": #處理分隔符號
        java_dirs = ";".join(dependence_dirs)
    else:
        java_dirs = ":".join(dependence_dirs)

    jpype.startJVM(jvm_path, "-ea", "-Djava.ext.dirs=%s" % java_dirs, convertStrings=True)

    AbsCore = jpype.JClass("package_a.AbsCore")
    AImpl = jpype.JClass("package_a.AImpl")
    BImpl = jpype.JClass("package_a.BImpl")
    C = jpype.JClass("package_a.C")
    D = jpype.JClass("package_a.D")
    ICore = jpype.JClass("package_a.ICore")

    Test = jpype.JClass("package_b.Test")

    test = Test()
    print Test.testStatic()  # 測試靜態(tài)方法
    test.testVoid()  # 測試Void方法
    print test.testString()  # 測試返回String的方法
    print test.testString("aaaaaa")  # 測試重載的方法
    print test.testICore(AImpl()) # 測試java實例入?yún)?    print test.testICore(BImpl())
    print test.testAbsCore(C()) #測試java實例入?yún)?    print test.testAbsCore(D())

    print test.testICore().test() #獲得java實例
    print test.testAbsCore().methodB() #獲得java實例

    jpype.shutdownJVM()

image.png

附上java的源碼,以及本人編譯后的jar茅撞。
鏈接:https://pan.baidu.com/s/11GQ2bm_DCm-Lz98x5GSB2w 密碼:0azg

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帆卓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子米丘,更是在濱河造成了極大的恐慌剑令,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拄查,死亡現(xiàn)場離奇詭異吁津,居然都是意外死亡,警方通過查閱死者的電腦和手機堕扶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門碍脏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人稍算,你說我怎么就攤上這事典尾。” “怎么了邪蛔?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵急黎,是天一觀的道長。 經(jīng)常有香客問我侧到,道長勃教,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任匠抗,我火速辦了婚禮故源,結果婚禮上,老公的妹妹穿的比我還像新娘汞贸。我一直安慰自己绳军,他們只是感情好,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布矢腻。 她就那樣靜靜地躺著门驾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪多柑。 梳的紋絲不亂的頭發(fā)上奶是,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音竣灌,去河邊找鬼聂沙。 笑死,一個胖子當著我的面吹牛初嘹,可吹牛的內(nèi)容都是我干的及汉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屯烦,長吁一口氣:“原來是場噩夢啊……” “哼坷随!你這毒婦竟也來了?” 一聲冷哼從身側響起漫贞,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甸箱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后迅脐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芍殖,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年谴蔑,在試婚紗的時候發(fā)現(xiàn)自己被綠了豌骏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡隐锭,死狀恐怖窃躲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钦睡,我是刑警寧澤蒂窒,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響洒琢,放射性物質(zhì)發(fā)生泄漏秧秉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一衰抑、第九天 我趴在偏房一處隱蔽的房頂上張望象迎。 院中可真熱鬧,春花似錦呛踊、人聲如沸砾淌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汪厨。三九已至,卻和暖如春愉择,著一層夾襖步出監(jiān)牢的瞬間骄崩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工薄辅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留要拂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓站楚,卻偏偏與公主長得像脱惰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子窿春,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 目前RocketMQ社區(qū)已經(jīng)發(fā)布RocketMQ python客戶端拉一,見:https://github.com/m...
    凡爾Issac閱讀 10,011評論 4 6
  • 一、前言 實驗目的 利用RMI技術對遠程文件夾進行控制:可以增加文件(文本文件)旧乞、修改文件(文本文件)蔚润、刪除文件、...
    Txue閱讀 2,067評論 0 1
  • 最近在做一個 WEB 項目尺栖,需要調(diào)用 OCX 進行連接讀卡器讀卡嫡纠。本來并不想用 OCX 技術,因為 ActiveX...
    安易學車閱讀 2,215評論 1 5
  • 一場說走就走的旅程 乙亥六月十日延赌,正直假期除盏,爸爸開車帶著我們?nèi)胰|戴河游覽。東戴河還沒有開發(fā)到位挫以,所謂海景酒店...
    雙空間閱讀 106評論 0 0
  • 愛之蔓錦開花了掐松。 愛之蔓的花是清新樸素的白色踱侣,愛之蔓錦的花卻是令人驚艷的暗紅色粪小。 這帶著細小絨毛的花瓣和映...
    prttysun閱讀 621評論 0 0