python中如何调用java_在Python程序中调用Java代码的实现
有头发且有趣的码农万里挑一~
14
有料叔 | 一位有故事的程序猿
前 言
开发Python程序,需求中需要用到Java码,Python作为“胶水”语言能够很好的实现这种需求。具体实现的过程如下:
1.环境准备
2.环境搭建
3.实验
1.环境准备
我实验过的两种搭配,都成功了,其他的搭配方式没有实验过不敢做过多的陈述,这里以搭配一为实验基础进行描述。
搭配一:windows 7(64位)+JDK(32位)+Python(32位)+eclipse+pycharm
搭配二:windows 7(64位)+JDK(6位)+Python(64位)+eclipse+pycharm光有以上的还不够,还需要一个作为桥梁的工具包,jpype1,这个工具包可以启动jvm,使java代码依然运行在jvm中。
实验过程中使用的各个工具的具体版本如下:
JDK(32位):1.8.0_211
Python(32位):3.7.2
jpype1(32位):0.6.3
eclipse+pycharm是两款开发工具,主要用来编写java和python代码
2.环境搭建
1.这里对JDK还有python的安装不做过多的称述。
2.jpype1的安装:
①:使用python自带的pip安装工具在线安装,发现不能正确安装,提示需要Microsoft Visual C++等,放弃。
②:使用python自带的pip安装工具离线安装,可以正确安装,但是问题来了,离线的安装包在哪里获取?如下链接可以获取,jpype1(32位):0.6.3。
链接:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype
如图:下载对应自己python版本的离包(可以在cmd中键入 python命令查看python版本)(这里我选择倒数第二个,命名中带有amd64是适应python64位的,没有amd64的是适应python32位的)
得到离线包之后,在cmd中使用命令:pip install离线包的位置可以顺利安装。(这里我已经安装过了没有截图,也懒得重新卸载再安装了)
3.实验
工具安装完毕之后,接下来看实验代码如何书写,借助eclipse开发java代码,并打jar包。
①:开发java代码
②:打jar包
经过打jar包之后,获得了jar文件。
③开发python程序
# 引入jpype模块import jpypeimport osif __name__ == '__main__': """ 基本的开发流程如下:①、使用jpype开启jvm ②、加载java类 ③、调用java方法 ④、关闭jvm(不是真正意义上的关闭,卸载之前加载的类) """# ①、使用jpype开启虚拟机(在开启jvm之前要加载类路径)# 加载刚才打包的jar文件
jarpath = os.path.join(os.path.abspath("."), "C:\\Users\\Administrator\\Desktop\\pythoncalljava-1-0-0.jar") # 获取jvm.dll 的文件路径
jvmPath = jpype.getDefaultJVMPath()
# 开启jvm
jpype.startJVM(jvmPath,"-ea", "-Djava.class.path=%s" % (jarpath))
# ②、加载java类(参数是java的长类名)javaClass = jpype.JClass("com.pythoncalljava.JavaClass") # 实例化java对象# javaInstance = javaClass()# ③、调用java方法,由于我写的是静态方法,直接使用类名就可以调用方法 javaClass.show() # ④、关闭jvm jpype.shutdownJVM() pass
④运行程序
总结:
1.如果是调用多个jar文件的话,要在jvm启动时指定jar文件路径,
jarpath,jarpath2,jarpath3,jarpath4是jar文件路径。
jpype.startJVM(jvmPath,"-ea", "-Djava.class.path=%s;%s;%s;%s" % (jarpath,jarpath2,jarpath3,jarpath4))
2.实际上没有真正的停止jvm,jvm随着python程序的退出而结束(JVM has been shutdown是指卸载之前加载的类。)
转载自:https://w.url.cn/s/A1jiWHt
留言区
python中如何调用java_在Python程序中调用Java代码的实现相关推荐
- 利用c#实现远程注入非托管WIN32程序,并利用嵌入汇编调用非托管WIN32程序中的内部过程...
c#通过调用windows API函数,可以很轻松的完成非托管WIN32程序的注入.内存读写等操作,以下为c#实现远程注入非托管WIN32程序,并利用嵌入汇编调用非托管WIN32程序中的内部过程的源码 ...
- 微信小程序中嵌套html_在微信小程序中渲染HTML内容3种解决方案及分析与问题解决...
大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 在微信小程序中渲 ...
- 独家 | 如何用简单的Python为数据科学家编写Web应用程序?(附代码链接)
作者:拉胡尔·阿加瓦尔(Rahul Agarwal), Walmart 实验室的数据科学家 翻译:陈之炎 校对:闫晓雨 本文约4300字,建议阅读10分钟. 本文阐述如何使用StreamLit创建支持 ...
- 如何用简单的Python为数据科学家编写Web应用程序?(附代码链接)
作者:拉胡尔·阿加瓦尔(Rahul Agarwal), Walmart 实验室的数据科学家 翻译:陈之炎 校对:闫晓雨 本文约4300字,建议阅读10分钟. 本文阐述如何使用StreamLit创建支 ...
- java如何调用linux命令_java程序中如何调用linux命令
java程序中如何调用linux命令 作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服 ...
- chrome插件中调用ajax,Chrome扩展程序中的Ajax调用无效
尝试在Chrome扩展程序中发送ajax请求.我已经确认请求返回200响应,它应该只是console.log来测试'.我不确定这里是否存在异常问题?我已经阅读了Chrome扩展程序' addListe ...
- linux查看进程调用接口,查看某个程序都调用哪些api函数
查看某个程序都调用哪些api函数以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 查看某个程序都调用哪些api函数 vs6 ...
- cocos2dx 应用程序调用已有的android程序,cocos2dx-JniHelper 使用(示例代码)
1.操作的游戏工程和cocos2d_x游戏引擎是一个目录的 2.跟jni相关的C++代码文件放在proj.android\jni\hellocpp目录下,每加一个cpp文件,都需在proj.andro ...
- matlab中str_,str编程中是啥意思 str在程序中什么意思
在编程中char是什么意思? 在编程中char是申明一个字符型变量的语句.比如 char str 这样申明后,str就表示是一个长度为一个字节的字符变量.在C语言中一般表示是一个字符,但在C51中,也 ...
最新文章
- 常考数据结构与算法:重建二叉树
- 大学物理光学思维导图_思维导图走进新华百货现代物流
- Android 通过代码改变控件的布局方式
- 梅朵是藏语鲜花的意思
- oracle创建、删除索引等操作
- Ansible 之 用户管理
- 我的docker随笔28:基于容器的升级方案实验
- PhoneGap在Android上的插件开发方法介绍
- linux系统下安装oracle客户端
- element手机验证格式_vue+element表单验证(身份证(校验),手机号码,导游证号码)...
- appium java模拟微信登录,使用Appium 测试微信小程序和微信公众号方法
- python使用matplotlib可视化柱状图(bar plot)、自定义柱状图的填充色、柱状图柱体的边缘色、配置字体使用中文轴标签
- 两个重要极限及其推导过程
- 输入一个字符串,判断它的所有字符中否全部是大写字母,如不是,统计小写字母个数,并将其转换成大写字母后输出
- 软考高级可以作为高级职称直接落户上海吗?
- 华为 面试 c语言 编程题,传说中华为的面试编程题-php 创建ecs-WinFrom控件库|.net开源控件库|HZHControls官网...
- ospfdr选举规则_OSPF的RID的选举的问题及DR/BDR选举原则
- C语言程序设计孙家啸第一版,广东4月自考各专业程使用教材.doc
- 终于还是出手了!【虎牙直播可观测】首期!干货与福利彻底豁出去了!
- 毕业设计英文文献java_计算机专业毕业设计论文外文文献中英文翻译——java对象...
热门文章
- {TypeError}clamp(): argument 'min' must be Number, not Tensor
- FCN模型训练中遇到的困难
- approxPolyDP-轮廓近似
- 学习RGB配色,灰度图
- opencl 实例源码
- 动词ing形式的5种用法_课后文档:英语语法思维第7课动词的5个形式的用法
- 设置html初始值0,数组怎么初始化?
- node中怎样将css导入到html,CSS无法使用Node.js加载到我的HTML代码中
- android 摇一摇监听,Android摇一摇功能实现(摇一摇监听)
- python中字符串中文乱码_[python] 中文乱码问题