JPype实现在python中调用JAVA的实例


Posted in Python onJuly 19, 2017

一、JPype简述

1.JPype是什么?

JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足。

2.JPype与Jython(JPython后继者)的区别?

1)运行环境不同:jython运行在jvm上,而JPype的实际运行环境仍然是python runtime,只是在运行期间启动了一个嵌入的jvm;

  2)使用者不同:jython是给java程序玩的,JPype是给python程序员玩的。

二、JPype安装

 1.先安装Python2.7和JAVA1.6

 2.安装JPype-0.5.4.2.win32-py2.7.exe(http://sourceforge.net/projects/jpype/files/JPype/0.5.4/)

 3.Ubuntu12.04安装命令:sudo apt-get install python-jpype

三、JPype使用说明

 1.启动JVM

JPype 提供的 startJVM() 函数的作用是启动 JAVA 虚拟机,所以在后续的任何 JAVA 代码被调用前,必须先调用此方法启动 JAVA 虚拟机。

jpype.startJVM() 的定义 

startJVM(jvm, *args)

jpype.startJVM() 的参数

参数 1: jvm, 描述你系统中 jvm.dll 文件所在的路径,如“ C:\Program Files\IBM\Java50\jre\bin\j9vm\jvm.dll ”。可以通过调用 jpype.getDefaultJVMPath() 得到默认的 JVM 路径。

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

-agentlib:libname[=options] 
 -classpath classpath 
 -verbose 
 -Xint

 2.关闭JVM

当使用完 JVM 后,可以通过 jpype.shutdownJVM() 来关闭 JVM,该函数没有输入参数。当 python 程序退出时,JVM 会自动关闭。

3.引用第三方Java扩展包

很多时候,在 python 项目中需要调用第三方的 Java 扩展包,这也是 JPype 的一个重要用途。

通过在 JVM 启动参数增加:-Djava.class.path=ext_classpath,实现在 python 代码中调用已有的 Java 扩展包。

 4.访问JAVA的系统属性

有时,某些 Java 应用需要设置或者获取 JVM 中的系统属性。

  1. 在 JVM 启动时设置系统变量示例:
  2. 在 JVM 的启动参数中加入如下参数:
-Dproperty=value

四、举例

1.直接调用JAVA API

from jpype import * 
import os.path 
startJVM("C:/Java/jdk1.6.0_10/jre/bin/client/jvm.dll", "-ea") 
java.lang.System.out.println("hello World") 
shutdownJVM()

2.调用JAVA第三方扩展包

1)JAVA自定义第三方jar包:将JpypeDemo类打包为jpypedemo.jar文件并存储到F:/sample_Py目录下

package jpype; 
 
public class JpypeDemo { 
public String sayHello(String user){ 
return "hello" + user; 
} 
public int calc(int a, int b){ 
return a + b;  
} 
}

  2)Python调用第三方JAVA jar包程序

from jpype import * 
import os.path 
jarpath = os.path.join(os.path.abspath('.'), 'F:/sample_Py/') 
startJVM("C:/Java/jdk1.6.0_10/jre/bin/client/jvm.dll","-ea", "-Djava.class.path=%s" % (jarpath + 'jpypedemo.jar')) 
#ubuntu 中startJVM("/home/geek/Android/jdk1.6.0_43/jre/lib/i386/server/libjvm.so","-ea", "-Djava.class.path=%s" % (jarpath + 'XXX.jar')) 
JDClass = JClass("jpype.JpypeDemo") 
jd = JDClass() 
#jd = JPackage("jpype").JpypeDemo() #两种创建jd的方法 
jprint = java.lang.System.out.println 
jprint(jd.sayHello("waw")) 
jprint(jd.calc(2,4)) 
shutdownJVM()

3.访问JAVA的系统属性

 假设你要设置的属性名为 yourProperty,属性值为 yourValue 。

1)JVM启动时设置系统变量示例

import jpype 
 jvmPath = jpype.getDefaultJVMPath() 
 jvmArg = “ -DyourProperty=yourValue ”
 if not jpype.isJVMStarted(): 
  jpype.startJVM(jvmPath,jvmArg)

2)在程序中设置系统变量示例

import jpype 
 prop = “ yourProperty ”
 value = “ yourValue ”
 system = jpype.JClass('java.lang.System') 
 system.setProperty(str(prop),str(value))

3)在程序中获取系统变量示例

import jpype 
 prop = “ yourProperty ”
 system = jpype.JClass('java.lang.System') 
 value = system.getProperty(str(prop))

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

Python 相关文章推荐
python模拟登录百度贴吧(百度贴吧登录)实例
Dec 18 Python
Python实现豆瓣图片下载的方法
May 25 Python
Python中最大最小赋值小技巧(分享)
Dec 23 Python
python 执行shell命令并将结果保存的实例
May 11 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
pyinstaller还原python代码过程图解
Jan 08 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
Oct 18 Python
python解包概念及实例
Feb 17 Python
基于PyTorch实现一个简单的CNN图像分类器
May 29 Python
简单谈谈Python中的json与pickle
Jul 19 #Python
利用Python操作消息队列RabbitMQ的方法教程
Jul 19 #Python
高效测试用例组织算法pairwise之Python实现方法
Jul 19 #Python
Python实现将文本生成二维码的方法示例
Jul 18 #Python
Python实现动态加载模块、类、函数的方法分析
Jul 18 #Python
Python使用plotly绘制数据图表的方法
Jul 18 #Python
python中日志logging模块的性能及多进程详解
Jul 18 #Python
You might like
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
说说JSON和JSONP 也许你会豁然开朗
2012/09/02 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
2016/08/15 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
详解基于angular-cli配置代理解决跨域请求问题
2017/07/05 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
vue将data恢复到初始状态 && 重新渲染组件实例
2020/09/04 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
Django中的CBV和FBV示例介绍
2018/02/25 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
Python实现微信消息防撤回功能的实例代码
2019/04/29 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
py-charm延长试用期限实例
2019/12/22 Python
Python 实现向word(docx)中输出
2020/02/13 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
Django中使用Celery的方法步骤
2020/12/07 Python
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
新闻记者个人求职的自我评价
2013/11/28 职场文书
社会实践活动总结范文
2014/07/03 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
初三化学教学反思
2016/02/22 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书