标题: 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已经启动了,也不能再次启动。

实际使用,获取java类

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

def getJVMClass():# java jar位置,被调用的jarjarpath = "/mnt/pet/photography-0.0.1-SNAPSHOT.jar"# 获取java pathjvmpath = 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:passJC = JClass('pet.photography.PetApplication')instance = JC()return instance

参考官方文档:

参考官网:点这里


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

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

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

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

一起学习,一起进步。

python调用java的方法-JPype的简单使用相关推荐

  1. python调用java的方法

    最近自己开发的一套测试平台,因为上游系统经常修改主数据,导致其中一个功能经常失败,要频繁找上游测试帮忙修改数据. 基于此种原因,对于这种过于依赖上游系统的接口,决定放弃直接调上游系统的http请求下发 ...

  2. python调用java代码方法

    前言: 公司要测试对外接口,接口中的数据又涉及到加密的问题,而python对加密数据进行位运算后,居然无法逆向位运算回来了(应该是个人能力不够吧),只好调用同事之前用的java代码中的函数去解码了,花 ...

  3. 绿化版Java11的环境配置与Python调用Java

    绿化Java环境的安装与配置 安装JDK 在Oracle的官网下载: 官方最新版本是16,个人选择下载11版本的zip压缩包:jdk-11.0.6_windows-x64_bin.zip 网盘下载地址 ...

  4. Python利用JPype调用Java对象方法【实现在Python中调用JAVA】

    一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...

  5. python利用jpype调用java对象方法

    实现在python中调用JAVA 一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器 ...

  6. python调用java方法_python调用java

    一.环境确认: 首先,要确认安装的jdk版本是1.8以上:其次,jdk安装位数与python安装的位数一致,及要么一起64位版本要么一起32版本. (以上2点不满足均会报错,比如:not found ...

  7. python调用java之Jpype实现java接口

    python实现java接口 概述 java程序 java接口 java测试函数 在python中实现java接口的两种方式 第一种:JImplements JImplements的使用示例 JImp ...

  8. Python调用Java代码部署及初步使用

    Python调用Java代码部署: jpype下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype 下载的时候需要使用Chrome浏览器进行下载 ...

  9. NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM(方法签名,CallXXXMethod)

    NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM 题目有点复杂,不过确实就是那么回事.这章想记录的内容比较多,先列出来: native static 与 nat ...

  10. 在php中调用java的方法

    跨平台,跨语言的项目现在已经屡见不鲜,今天就说一说之前做过项目中,php调用java的方法: 无论是在linux远程服务器上,还是在windows下,最简单有效的方法,应该属于javabridge.j ...

最新文章

  1. JavaSript模块规范 - AMD规范与CMD规范介绍[转]
  2. leetcode_zigzag conversion
  3. KDD 2020 开源论文 | 稀疏优化的块分解算法
  4. MongoDB操作:insert()
  5. stl中Priority Queues(优先队列)的基本用法
  6. Qt工作笔记-遍历文件夹里面的所有文件,并在QTreeWidget内显示
  7. 剑指offer 变态跳台阶 特别sb的一道题
  8. 可以方便的将SQL语句的执行结果显示成表格结果的JAVA类,可以用于不同的数据显示
  9. expect实现交互式输入
  10. dpkg: 依赖关系问题使得 linux-headers-5.7.19-050719-generic 的配置工作不能继续
  11. MyBatis 动态 SQL(认真看看, 以后写 SQL 就爽多了)
  12. Node.js 教程第十三篇——WebSocket
  13. SqlParameter的使用
  14. 使用ADB命令,手机连接不上电脑的问题
  15. 陌生男女社交软件交流手册
  16. 2023哈尔滨工业大学计算机考研信息汇总
  17. mysql 上传rar文件大小_js文件上传 自定义压缩文件和文件格式及大小限制
  18. bit、Byte、bps、Bps、pps、Gbps单位说明
  19. 3904三极管是什么功能_学三极管能遇到这篇巧文,我太幸福了!
  20. Android-Apk的安装流程分析(二)

热门文章

  1. java计算机毕业设计足球队管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  2. Request 请求转发
  3. 使用Python脚本将酷狗音乐的缓存文件修改为可播放
  4. [转载]关于CIPS不得不知道的14个要点
  5. 小米上的lineageos
  6. 手机网络延迟测试软件,手机网速延迟测试在线(手机网络延迟测试工具)
  7. 案例分析 - OOM的内存分析
  8. java重载父类方法_子类重载父类方法
  9. 学习了pr后的收获_pr心得体会
  10. Mac上很好用的播放器Elmedia Player