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 流程控制实例代码
Sep 25 Python
Python实现从订阅源下载图片的方法
Mar 11 Python
Python字符串详细介绍
May 09 Python
python编程实现12306的一个小爬虫实例
Dec 27 Python
浅谈dataframe中更改列属性的方法
Jul 10 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
python3 爬取图片的实例代码
Nov 06 Python
python实现DEM数据的阴影生成的方法
Jul 23 Python
wxpython实现按钮切换界面的方法
Nov 19 Python
Python3 shelve对象持久存储原理详解
Mar 23 Python
Python语言编写智力问答小游戏功能
Oct 13 Python
Python+Opencv实现把图片、视频互转的示例
Dec 17 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实现从远程下载文件的方法
2015/03/12 PHP
PHP在线书签系统分享
2016/01/04 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
Cookie跨域问题解决方案代码示例
2020/11/24 PHP
数理公式,也可以这么唯美
2021/03/10 无线电
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
小程序实现tab标签页
2020/11/16 Javascript
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
Python读写Excel文件方法介绍
2014/11/22 Python
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
python利用正则表达式搜索单词示例代码
2017/09/24 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
python实现画一颗树和一片森林
2018/06/25 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
考试不及格的检讨书
2014/01/22 职场文书
上班离岗检讨书
2014/01/27 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
八项规定对照检查材料
2014/08/31 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
纪录片信仰观后感
2015/06/08 职场文书
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏
nginx日志格式分析和修改
2022/04/28 Servers