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实现linux服务器批量修改密码并生成execl
Apr 22 Python
python base64 decode incorrect padding错误解决方法
Jan 08 Python
python实现对任意大小图片均匀切割的示例
Dec 05 Python
python实现自动获取IP并发送到邮箱
Dec 26 Python
利用Django模版生成树状结构实例代码
May 19 Python
Python在Matplotlib图中显示中文字体的操作方法
Jul 29 Python
Python count函数使用方法实例解析
Mar 23 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
Apr 02 Python
Python实现多线程下载脚本的示例代码
Apr 03 Python
Keras loss函数剖析
Jul 06 Python
Python面试不修改数组找出重复的数字
May 20 Python
python计算列表元素与乘积详情
Aug 05 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 图像处理类1
2009/06/15 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
用户注册常用javascript代码
2009/08/29 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
ES6下子组件调用父组件的方法(推荐)
2018/02/23 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
利用python打开摄像头及颜色检测方法
2018/08/03 Python
Django 解决新建表删除后无法重新创建等问题
2020/05/21 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
python如何控制进程或者线程的个数
2020/10/16 Python
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
《和田的维吾尔》教学反思
2014/04/14 职场文书
工程项目经理任命书
2014/06/05 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
党支部半年考察意见
2015/06/01 职场文书
反邪教观后感
2015/06/11 职场文书
交通安全学习心得体会
2016/01/18 职场文书
正确使用MySQL update语句
2021/05/26 MySQL
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js
mysql事务对效率的影响分析总结
2021/10/24 MySQL
分享3个非常实用的 Python 模块
2022/03/03 Python
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle
MySQL详细讲解变量variables的用法
2022/06/21 MySQL