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计算三角形的面积代码
Dec 18 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
5款Python程序员高频使用开发工具推荐
Apr 10 Python
Python 3.8新特征之asyncio REPL
May 28 Python
python 爬取古诗文存入mysql数据库的方法
Jan 08 Python
通过python实现windows桌面截图代码实例
Jan 17 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
Apr 07 Python
Python astype(np.float)函数使用方法解析
Jun 08 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
Jun 29 Python
python 爬取豆瓣网页的示例
Apr 13 Python
TensorFlow的自动求导原理分析
May 26 Python
python使用pymysql模块操作MySQL
Jun 16 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遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
zf框架db类的分页示例分享
2014/03/14 PHP
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
php两种无限分类方法实例
2015/04/21 PHP
Django 中 cookie的使用
2017/08/17 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
Tab页界面,用jQuery及Ajax技术实现
2009/09/21 Javascript
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
React-Native 组件之 Modal的使用详解
2017/08/08 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
JavaScript交换两个变量方法实例
2019/11/25 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
python实现用户答题功能
2018/01/17 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
《要下雨了》教学反思
2014/02/17 职场文书
大学社团招新的通讯稿
2014/09/10 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
2015年招生工作总结
2015/05/04 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
Win10 Anaconda安装python-pcl
2022/04/29 Servers
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers