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已经启动了,也不能再次启动。
实际使用,获取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的简单使用相关推荐
- python调用java的方法
最近自己开发的一套测试平台,因为上游系统经常修改主数据,导致其中一个功能经常失败,要频繁找上游测试帮忙修改数据. 基于此种原因,对于这种过于依赖上游系统的接口,决定放弃直接调上游系统的http请求下发 ...
- python调用java代码方法
前言: 公司要测试对外接口,接口中的数据又涉及到加密的问题,而python对加密数据进行位运算后,居然无法逆向位运算回来了(应该是个人能力不够吧),只好调用同事之前用的java代码中的函数去解码了,花 ...
- 绿化版Java11的环境配置与Python调用Java
绿化Java环境的安装与配置 安装JDK 在Oracle的官网下载: 官方最新版本是16,个人选择下载11版本的zip压缩包:jdk-11.0.6_windows-x64_bin.zip 网盘下载地址 ...
- Python利用JPype调用Java对象方法【实现在Python中调用JAVA】
一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...
- python利用jpype调用java对象方法
实现在python中调用JAVA 一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器 ...
- python调用java方法_python调用java
一.环境确认: 首先,要确认安装的jdk版本是1.8以上:其次,jdk安装位数与python安装的位数一致,及要么一起64位版本要么一起32版本. (以上2点不满足均会报错,比如:not found ...
- python调用java之Jpype实现java接口
python实现java接口 概述 java程序 java接口 java测试函数 在python中实现java接口的两种方式 第一种:JImplements JImplements的使用示例 JImp ...
- Python调用Java代码部署及初步使用
Python调用Java代码部署: jpype下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype 下载的时候需要使用Chrome浏览器进行下载 ...
- NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM(方法签名,CallXXXMethod)
NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM 题目有点复杂,不过确实就是那么回事.这章想记录的内容比较多,先列出来: native static 与 nat ...
- 在php中调用java的方法
跨平台,跨语言的项目现在已经屡见不鲜,今天就说一说之前做过项目中,php调用java的方法: 无论是在linux远程服务器上,还是在windows下,最简单有效的方法,应该属于javabridge.j ...
最新文章
- JavaSript模块规范 - AMD规范与CMD规范介绍[转]
- leetcode_zigzag conversion
- KDD 2020 开源论文 | 稀疏优化的块分解算法
- MongoDB操作:insert()
- stl中Priority Queues(优先队列)的基本用法
- Qt工作笔记-遍历文件夹里面的所有文件,并在QTreeWidget内显示
- 剑指offer 变态跳台阶 特别sb的一道题
- 可以方便的将SQL语句的执行结果显示成表格结果的JAVA类,可以用于不同的数据显示
- expect实现交互式输入
- dpkg: 依赖关系问题使得 linux-headers-5.7.19-050719-generic 的配置工作不能继续
- MyBatis 动态 SQL(认真看看, 以后写 SQL 就爽多了)
- Node.js 教程第十三篇——WebSocket
- SqlParameter的使用
- 使用ADB命令,手机连接不上电脑的问题
- 陌生男女社交软件交流手册
- 2023哈尔滨工业大学计算机考研信息汇总
- mysql 上传rar文件大小_js文件上传 自定义压缩文件和文件格式及大小限制
- bit、Byte、bps、Bps、pps、Gbps单位说明
- 3904三极管是什么功能_学三极管能遇到这篇巧文,我太幸福了!
- Android-Apk的安装流程分析(二)
热门文章
- java计算机毕业设计足球队管理系统源码+数据库+系统+lw文档+mybatis+运行部署
- Request 请求转发
- 使用Python脚本将酷狗音乐的缓存文件修改为可播放
- [转载]关于CIPS不得不知道的14个要点
- 小米上的lineageos
- 手机网络延迟测试软件,手机网速延迟测试在线(手机网络延迟测试工具)
- 案例分析 - OOM的内存分析
- java重载父类方法_子类重载父类方法
- 学习了pr后的收获_pr心得体会
- Mac上很好用的播放器Elmedia Player