python调用java的方法-JPype的简单使用


标题: python调用java的方法-JPype的简单使用
日期: 2021-07-29 22:30:05
标签: [python,java,jpype]
分类: Python

今天来说下,python调用java的方法,有些时候,数据处理比较麻烦,像加解密,可能之前的技术栈用java,或者对接的业务方提供了java版的api,但是公司使用的是技术栈是python,平台也是python,不方便使用java编写,并且也不好将java代码用python代码再实现一遍时,就需要用到python调用java了。下面来看看具体如何实现呢?

介绍

python作为一种很灵活的脚本开发语言,在现在被广泛使用,但是在服务端,相比java较弱,于是如何补足这个短板,节省开发时间,提高效率呢,就需要找到一个python调用java的方法,于是jpype被开发出来,专门调用java类,获取类的方法,创建java对象实例,完成需求。
官方网站点击这里

安装

pip install jpype1

简单使用

来看看简单的hello world程序,直接python命令行了:

(base) [chenzuoli@chenzuolis-MacBook /Users/chenzuoli]$python
Python 3.7.4 (default, Aug 13 2019, 15:17:50)
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import jpype
>>> jvmPath = jpype.getDefaultJVMPath()
>>> jpype.startJVM(jvmPath)
>>> jpype.java.lang.System.out.println( "hello world!" )
hello world!
>>> jpype.shutdownJVM()
>>>

jpype提供的startJVM()函数的作用就是启动java虚拟机,后续的java代码就会在java虚拟机里执行,并且虚拟机里的对象在程序运行完成后,销毁,虚拟机会自动释放关闭掉,也可以手动关闭,关闭后,虚拟机内的对象就无法使用了。

startJVM()方法是可以传参数的,来看看官方给出的源码:

startJVM(jvm, *args)

有2个参数:
1.jvm:jvmPath,可以获取默认的jvm path

jpype.getDefaultJVMPath()

2.args:启动jvm指定的一些参数

 -agentlib:libname[=options] 
 -classpath classpath 
 -verbose 
 -Xint

判断jvm是否已经启动:

jpype.isJVMStarted() 

这个方法在程序比较复杂的时候做判断使用。

注意:
如果jvm被关闭,再次启动会出现报错:
jvm

如果jvm已经启动了,也不能再次启动。

实际使用,获取java类

通过将jar添加到java classpath里,然后指定主类,就可以获得java对象了,然后就可以调用他的属性和方法了:

def getJVMClass():
    # java jar位置,被调用的jar
    jarpath = "/mnt/pet/photography-0.0.1-SNAPSHOT.jar"

    # 获取java path
    jvmpath = jpype.getDefaultJVMPath()

    # 启动jvm,如果已经启动了,再次启动会报错,所以try except一下
    # 其中参数convertStrings设置为false,意思是java的string不转换为python的string类型。不设置为false的话,会报警warning:
    # Deprecated: convertStrings was not specified when starting the JVM. The default
    # behavior in JPype will be False starting in JPype 0.8. The recommended setting
    # for new code is convertStrings=False. The legacy value of True was assumed for
    # this session. If you are a user of an application that reported this warning,
    # please file a ticket with the developer.
    try:
        startJVM(jvmpath, "-ea", "-Djava.class.path=%s" % jarpath, convertStrings=False)
    except:
        pass
    JC = JClass('pet.photography.PetApplication')
    instance = JC()
    return instance

参考官方文档:
startjvm_args

参考官网:点这里


每天进步一点点,不在乎输赢。

欢迎关注我的微信公众号,比较喜欢分享知识,也喜欢宠物,所以做了这2个公众号:

欢迎关注我的微信公众号,比较喜欢分享知识,也喜欢宠物,所以做了这2个公众号:
程序员写书

喜欢宠物的朋友可以关注:【电巴克宠物Pets】
电巴克宠物

一起学习,一起进步。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用 `jpype` 调用 Java 包需要先安装 `jpype` 库,可以使用 `pip` 命令进行安装: ``` pip install jpype1 ``` 然后,可以按照以下步骤使用 `jpype` 调用 Java 包并传参: 1. 首先,需要启动 JVM 进程,可以使用 `jpype.startJVM()` 函数来启动: ```python import jpype jpype.startJVM() ``` 2. 导入 Java 类: ```python java_class = jpype.JClass('com.example.MyClass') ``` 其中,`com.example.MyClass` 是要调用Java 类的全限定名。 3. 创建 Java 对象: ```python java_object = java_class() ``` 4. 调用 Java 方法: ```python result = java_object.myMethod('param1', 'param2') ``` 其中,`myMethod` 是要调用Java 方法名,`'param1'`、`'param2'` 是传递给 Java 方法的参数。 5. 关闭 JVM: ```python jpype.shutdownJVM() ``` 完整示例代码如下: ```python import jpype # 启动 JVM jpype.startJVM() # 导入 Javajava_class = jpype.JClass('com.example.MyClass') # 创建 Java 对象 java_object = java_class() # 调用 Java 方法 result = java_object.myMethod('param1', 'param2') # 关闭 JVM jpype.shutdownJVM() ``` 注意,如果 Java 类需要传递复杂类型的参数,需要先将 Python 对象转换为 Java 对象。可以使用 `jpype.java` 模块中的函数进行转换,例如: ```python import jpype # 启动 JVM jpype.startJVM() # 导入 Javajava_class = jpype.JClass('com.example.MyClass') # 创建 Java 对象 java_object = java_class() # 转换 Python 对象为 Java 对象 param1 = jpype.java.lang.String('hello') param2 = jpype.JArray(jpype.JInt)([1, 2, 3]) # 调用 Java 方法 result = java_object.myMethod(param1, param2) # 关闭 JVM jpype.shutdownJVM() ``` 在上面的示例中,`jpype.java.lang.String` 将 Python 字符串转换为 Java 字符串,`jpype.JArray` 将 Python 列表转换为 Java 数组。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenzuoli

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值