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 相关文章推荐
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
Flask入门教程实例:搭建一个静态博客
Mar 27 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
Apr 17 Python
Python中random模块生成随机数详解
Mar 10 Python
python读写json文件的简单实现
Apr 11 Python
Mac 上切换Python多版本
Jun 17 Python
Python读取文件内容的三种常用方式及效率比较
Oct 07 Python
Python实现的本地文件搜索功能示例【测试可用】
May 30 Python
python实现五子棋游戏
Jun 18 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 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之第八天
2006/10/09 PHP
php define的第二个参数使用方法
2013/11/04 PHP
php魔术变量用法实例详解
2014/11/13 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
PHP+MySQL存储数据常见中文乱码问题小结
2016/06/13 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
Prototype 学习 Prototype对象
2009/07/12 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
js禁止页面复制功能禁用页面右键菜单示例代码
2013/08/29 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
angularjs指令之绑定策略(@、=、&)
2017/04/13 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
python获得文件创建时间和修改时间的方法
2015/06/30 Python
python实现中文转换url编码的方法
2016/06/14 Python
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
python爬取内容存入Excel实例
2019/02/20 Python
PyQt5实现简易电子词典
2019/06/25 Python
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
写给女生的道歉信
2014/01/08 职场文书
企业党员公开承诺书
2014/03/26 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
创业计划书之家政服务
2019/09/18 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS