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 相关文章推荐
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 Python
python编程羊车门问题代码示例
Oct 25 Python
利用Python进行数据可视化常见的9种方法!超实用!
Jul 11 Python
使用selenium模拟登录解决滑块验证问题的实现
May 10 Python
用sqlalchemy构建Django连接池的实例
Aug 29 Python
使用OpenCV实现仿射变换—平移功能
Aug 29 Python
Python根据服务获取端口号的方法
Sep 25 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
Python基于httpx模块实现发送请求
Jul 07 Python
Elasticsearch py客户端库安装及使用方法解析
Sep 14 Python
python 单机五子棋对战游戏
Apr 28 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 include的妙用,实现路径加密
2008/07/29 PHP
PHP通用检测函数集合
2011/02/08 PHP
php获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
PHP Session 变量的使用方法详解与实例代码
2013/09/11 PHP
PHP数据过滤的方法
2013/10/30 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
PHP读取Excel类文件
2017/05/15 PHP
让元素在网页中可拖动示例代码
2013/08/13 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
jQuery选择器之子元素过滤选择器
2017/09/28 jQuery
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
linux环境下的python安装过程图解(含setuptools)
2017/11/22 Python
python实现list由于numpy array的转换
2018/04/04 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
Python函数返回不定数量的值方法
2019/01/22 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
python Pillow图像处理方法汇总
2019/10/16 Python
Python连接字符串过程详解
2020/01/06 Python
用友笔试题目
2016/10/25 面试题
客户代表自我评价范例
2013/09/24 职场文书
大学毕业登记表自我鉴定
2013/10/09 职场文书
日语求职信范文
2013/12/17 职场文书
读书活动总结
2014/04/28 职场文书
法人授权委托书范本
2014/09/17 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书