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根据经纬度计算距离示例
Feb 16 Python
Python中itertools模块用法详解
Sep 25 Python
python使用nntp读取新闻组内容的方法
May 08 Python
python学生信息管理系统
Mar 13 Python
Python中应该使用%还是format来格式化字符串
Sep 25 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
Jun 21 Python
python tkinter库实现气泡屏保和锁屏
Jul 29 Python
Python  Django 母版和继承解析
Aug 09 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
Python新手如何理解循环加载模块
May 29 Python
python中类与对象之间的关系详解
Dec 16 Python
Python利用FlashText算法实现替换字符串
Mar 31 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完整的日历类(CLASS)
2006/11/27 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
2019/06/12 PHP
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
使用C#配合ArcGIS Engine进行地理信息系统开发
2016/02/19 Python
Python变量和字符串详解
2017/04/29 Python
Python正则表达式经典入门教程
2017/05/22 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
python基本语法练习实例
2017/09/19 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
python的exec、eval使用分析
2017/12/11 Python
python opencv读mp4视频的实例
2018/12/07 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
django框架模板语言使用方法详解
2019/07/18 Python
python中树与树的表示知识点总结
2019/09/14 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
广州品高软件.net笔面试题目
2012/04/18 面试题
酒吧总经理岗位职责
2013/12/10 职场文书
护士自我鉴定总结
2014/03/24 职场文书
课内比教学心得体会
2014/09/09 职场文书
公司股份合作协议书
2014/12/07 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python