有头发且有趣的码农万里挑一~

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代码的实现相关推荐

  1. 利用c#实现远程注入非托管WIN32程序,并利用嵌入汇编调用非托管WIN32程序中的内部过程...

    c#通过调用windows API函数,可以很轻松的完成非托管WIN32程序的注入.内存读写等操作,以下为c#实现远程注入非托管WIN32程序,并利用嵌入汇编调用非托管WIN32程序中的内部过程的源码 ...

  2. 微信小程序中嵌套html_在微信小程序中渲染HTML内容3种解决方案及分析与问题解决...

    大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 在微信小程序中渲 ...

  3. 独家 | 如何用简单的Python为数据科学家编写Web应用程序?(附代码链接)

    作者:拉胡尔·阿加瓦尔(Rahul Agarwal), Walmart 实验室的数据科学家 翻译:陈之炎 校对:闫晓雨 本文约4300字,建议阅读10分钟. 本文阐述如何使用StreamLit创建支持 ...

  4. 如何用简单的Python为数据科学家编写Web应用程序?(附代码链接)

    作者:拉胡尔·阿加瓦尔(Rahul Agarwal), Walmart 实验室的数据科学家 翻译:陈之炎  校对:闫晓雨 本文约4300字,建议阅读10分钟. 本文阐述如何使用StreamLit创建支 ...

  5. java如何调用linux命令_java程序中如何调用linux命令

    java程序中如何调用linux命令 作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服 ...

  6. chrome插件中调用ajax,Chrome扩展程序中的Ajax调用无效

    尝试在Chrome扩展程序中发送ajax请求.我已经确认请求返回200响应,它应该只是console.log来测试'.我不确定这里是否存在异常问题?我已经阅读了Chrome扩展程序' addListe ...

  7. linux查看进程调用接口,查看某个程序都调用哪些api函数

    查看某个程序都调用哪些api函数以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 查看某个程序都调用哪些api函数 vs6 ...

  8. cocos2dx 应用程序调用已有的android程序,cocos2dx-JniHelper 使用(示例代码)

    1.操作的游戏工程和cocos2d_x游戏引擎是一个目录的 2.跟jni相关的C++代码文件放在proj.android\jni\hellocpp目录下,每加一个cpp文件,都需在proj.andro ...

  9. matlab中str_,str编程中是啥意思 str在程序中什么意思

    在编程中char是什么意思? 在编程中char是申明一个字符型变量的语句.比如 char str 这样申明后,str就表示是一个长度为一个字节的字符变量.在C语言中一般表示是一个字符,但在C51中,也 ...

最新文章

  1. 常考数据结构与算法:重建二叉树
  2. 大学物理光学思维导图_思维导图走进新华百货现代物流
  3. Android 通过代码改变控件的布局方式
  4. 梅朵是藏语鲜花的意思
  5. oracle创建、删除索引等操作
  6. Ansible 之 用户管理
  7. 我的docker随笔28:基于容器的升级方案实验
  8. PhoneGap在Android上的插件开发方法介绍
  9. linux系统下安装oracle客户端
  10. element手机验证格式_vue+element表单验证(身份证(校验),手机号码,导游证号码)...
  11. appium java模拟微信登录,使用Appium 测试微信小程序和微信公众号方法
  12. python使用matplotlib可视化柱状图(bar plot)、自定义柱状图的填充色、柱状图柱体的边缘色、配置字体使用中文轴标签
  13. 两个重要极限及其推导过程
  14. 输入一个字符串,判断它的所有字符中否全部是大写字母,如不是,统计小写字母个数,并将其转换成大写字母后输出
  15. 软考高级可以作为高级职称直接落户上海吗?
  16. 华为 面试 c语言 编程题,传说中华为的面试编程题-php 创建ecs-WinFrom控件库|.net开源控件库|HZHControls官网...
  17. ospfdr选举规则_OSPF的RID的选举的问题及DR/BDR选举原则
  18. C语言程序设计孙家啸第一版,广东4月自考各专业程使用教材.doc
  19. 终于还是出手了!【虎牙直播可观测】首期!干货与福利彻底豁出去了!
  20. 毕业设计英文文献java_计算机专业毕业设计论文外文文献中英文翻译——java对象...

热门文章

  1. {TypeError}clamp(): argument 'min' must be Number, not Tensor
  2. FCN模型训练中遇到的困难
  3. approxPolyDP-轮廓近似
  4. 学习RGB配色,灰度图
  5. opencl 实例源码
  6. 动词ing形式的5种用法_课后文档:英语语法思维第7课动词的5个形式的用法
  7. 设置html初始值0,数组怎么初始化?
  8. node中怎样将css导入到html,CSS无法使用Node.js加载到我的HTML代码中
  9. android 摇一摇监听,Android摇一摇功能实现(摇一摇监听)
  10. python中字符串中文乱码_[python] 中文乱码问题