python调用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() {// 测试静态方法 
        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实例,以接口类型入参
        return core.test();
    }

    public String testAbsCore(AbsCore core) { //测试传入java实例, 以抽象类型入参
        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()  # 测试静态方法
    test.testVoid()  # 测试Void方法
    print test.testString()  # 测试返回String的方法
    print test.testString("aaaaaa")  # 测试重载的方法
    print test.testICore(AImpl()) # 测试java实例入参
    print test.testICore(BImpl())
    print test.testAbsCore(C()) #测试java实例入参
    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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容

  • 目前RocketMQ社区已经发布RocketMQ python客户端,见:https://github.com/m...
    凡尔Issac阅读 10,018评论 4 6
  • 一、前言 实验目的 利用RMI技术对远程文件夹进行控制:可以增加文件(文本文件)、修改文件(文本文件)、删除文件、...
    Txue阅读 2,069评论 0 1
  • 最近在做一个 WEB 项目,需要调用 OCX 进行连接读卡器读卡。本来并不想用 OCX 技术,因为 ActiveX...
    安易学车阅读 2,217评论 1 5
  • 一场说走就走的旅程 乙亥六月十日,正直假期,爸爸开车带着我们全家去东戴河游览。东戴河还没有开发到位,所谓海景酒店...
    雙空間阅读 106评论 0 0
  • 爱之蔓锦开花了。 爱之蔓的花是清新朴素的白色,爱之蔓锦的花却是令人惊艳的暗红色。 这带着细小绒毛的花瓣和映...
    prttysun阅读 623评论 0 0