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 18 Python
Python and、or以及and-or语法总结
Apr 14 Python
Python查询阿里巴巴关键字排名的方法
Jul 08 Python
Python实现的IP端口扫描工具类示例
Feb 15 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 Python
django将网络中的图片,保存成model中的ImageField的实例
Aug 07 Python
python 普通克里金(Kriging)法的实现
Dec 19 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
May 18 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
基于python模拟bfs和dfs代码实例
Nov 19 Python
python playwright之元素定位示例详解
Jul 23 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
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
百万级别知乎用户数据抓取与分析之PHP开发
2015/09/28 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
动态表格Table类的实现
2009/08/26 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
jQuery实现弹幕特效
2019/11/29 jQuery
原生js实现日期选择插件
2020/05/21 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
Python 第一步 hello world
2009/09/25 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
Python3处理HTTP请求的实例
2018/05/10 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
得到Class的三个过程是什么
2012/08/10 面试题
应届毕业生简历自我评价
2014/01/31 职场文书
房产公证委托书范本
2014/09/20 职场文书
国际贸易实训报告
2014/11/05 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫