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程序设计入门(2)变量类型简介
Jun 16 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
Python实现简单的语音识别系统
Dec 13 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
django主动抛出403异常的方法详解
Jan 04 Python
python实现二维数组的对角线遍历
Mar 02 Python
利用pyecharts实现地图可视化的例子
Aug 12 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 Python
Pyhton爬虫知识之正则表达式详解
Apr 01 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 Http_Template_IT类库进行模板替换
2009/03/19 PHP
php 代码优化之经典示例
2011/03/24 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
Python中使用SAX解析xml实例
2014/11/21 Python
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
Python使用分布式锁的代码演示示例
2018/07/30 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
如何用Python徒手写线性回归
2021/01/25 Python
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
初级Java程序员面试题
2016/03/03 面试题
服装厂厂长岗位职责
2013/12/27 职场文书
新农村建设典型材料
2014/05/31 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书