Python使用jpype模块调用jar包过程解析


Posted in Python onJuly 29, 2020

一、jpype模块是什么?

能够让 python 代码方便地调用 Java 代码的工具

二、jpype模块安装

安装和其它模块没区别,但是注意模块名 是 jpype1 ,后面有个1

pip install jpype1

三、jpype模块应用(macOs下)

笔者在标题里面备注了所使用的操作系统,因为windows操作系统的一个配置有点区别,待会遇到再讲解吧。

3.1 jpype模块测试

import jpype

# getDefaultJVMPath 获取默认的 JVM 路径
jvm_path = jpype.getDefaultJVMPath()
# startJVM()启动 JAVA 虚拟机
jpype.startJVM(jvm_path,'-ea',convertStrings=False)
# 利用jpype调用输出语句
jpype.java.lang.System.out.println('Success')
# shutdownJVM()关闭JAVA虚拟机
jpype.shutdownJVM()

在上面代码中,如果你成功输出hello,说明环境安装配置成功了。

其中 jpype.startJVM() 的定义是

startJVM(jvm, *args)

参数 1: jvm, 描述的是系统中 jvm.dll 文件所在的路径,可以通过调用 jpype.getDefaultJVMPath() 得到默认的 JVM 路径。

参数 2: args, 为可选参数,会被 JPype 直接传递给 JVM 作为 Java 虚拟机的启动参数。此处适合所有合法的 JVM 启动参数,例

如:

常用为-ea启动断言机制、-Djava.class.path调用的jar包路径、-Djava.ext.dirs调用jar包的依赖包目录等

3.2 jpype模块调用jar包

第一步:编写java一个类,用eclipse等工具编写,代码如下:

package com.newdream;

//简单的一个java类
public class Calc {
	int num1;
	int num2;
	public Calc(int n1,int n2) {
		this.num1 = n1;
		this.num2 = n2;
	}
	
	public int add() {
		return this.num1 + this.num2;
	}
	
	public int sub() {
		return this.num1 - this.num2;
	}
	
}

第二步:通过在eclipse中右击该类,点击export导出为jar包格式

第三步:把jar包放到python项目下后,编写代码如下即可调用:

import jpype

jvm_path = jpype.getDefaultJVMPath()
jpype.startJVM(jvm_path,
        '-ea',
        '-Djava.class.path=%s'%'./libs/Calc.jar',
        convertStrings=False)
jclass = jpype.JClass('com.newdream.Calc') #加载类
calc = jclass(10,20) #传入所需参数
value = calc.add() #调用类中的add方法
print(value)
jpype.shutdownJVM() #关闭JAVA虚拟机

以上即可完成调用jar包。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现排序算法
Feb 14 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
Apr 09 Python
简单谈谈Python中的闭包
Nov 30 Python
python编程之requests在网络请求中添加cookies参数方法详解
Oct 25 Python
Python实现图片滑动式验证识别方法
Nov 09 Python
Python深度优先算法生成迷宫
Jan 22 Python
python3+PyQt5泛型委托详解
Apr 24 Python
python判断数字是否是超级素数幂
Sep 27 Python
python 批量添加的button 使用同一点击事件的方法
Jul 17 Python
Django 全局的static和templates的使用详解
Jul 19 Python
python系列 文件操作的代码
Oct 06 Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 Python
Python 防止死锁的方法
Jul 29 #Python
Python定义一个Actor任务
Jul 29 #Python
Python如何重新加载模块
Jul 29 #Python
Python加速程序运行的方法
Jul 29 #Python
如何在python中判断变量的类型
Jul 29 #Python
Python中的With语句的使用及原理
Jul 29 #Python
解决c++调用python中文乱码问题
Jul 29 #Python
You might like
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
php实现word转html的方法
2016/01/22 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
简单实用jquery版三级联动select示例
2013/07/04 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
概述BootStrap中role="form"及role作用角色
2016/12/08 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
小程序实现列表删除功能
2018/10/30 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
简单了解python的一些位运算技巧
2019/07/13 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
J2EE中常用的名词进行解释
2015/11/09 面试题
社区端午节活动方案
2014/01/28 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
交通事故和解协议书
2014/09/25 职场文书
大学生党员批评与自我批评
2014/09/28 职场文书
应急管理工作总结2015
2015/05/04 职场文书
光荣之路观后感
2015/06/12 职场文书