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实现apahce网站日志分析示例
Apr 02 Python
Python数据结构之Array用法实例
Oct 09 Python
Python封装shell命令实例分析
May 05 Python
初步认识Python中的列表与位运算符
Oct 12 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
Jun 16 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
May 24 Python
Django开发的简易留言板案例详解
Dec 04 Python
Python魔术方法专题
Jun 19 Python
容易被忽略的Python内置类型
Sep 03 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 Python
python快速安装OpenCV的步骤记录
Feb 22 Python
pandas 实现将NaN转换为None
May 14 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
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
php实现socket推送技术的示例
2017/12/20 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
javascript里使用php代码实例
2014/12/13 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
2015/06/05 Javascript
JavaScript接口的实现三种方式(推荐)
2016/06/14 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
2017/02/13 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
基于JS实现html中placeholder属性提示文字效果示例
2018/04/19 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
浅析python协程相关概念
2018/01/20 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
Julep官网:美容产品和指甲油
2017/02/25 全球购物
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
网络编辑求职信
2014/04/30 职场文书
写求职信有哪些注意事项
2014/05/08 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
模范班主任事迹材料
2014/12/17 职场文书
基于angular实现树形二级表格
2021/10/16 Javascript