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使用xlrd实现检索excel中某列含有指定字符串记录的方法
May 09 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
全面解析Python的While循环语句的使用方法
Oct 13 Python
python变量不能以数字打头详解
Jul 06 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
Python 多线程的实例详解
Sep 07 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 Python
python 对多个csv文件分别进行处理的方法
Jan 07 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
对Python中画图时候的线类型详解
Jul 07 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
Dec 13 Python
获取CSDN文章内容并转换为markdown文本的python
Sep 06 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中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
2012/09/07 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
JavaScript实现同时调用多个函数的方法
2015/11/09 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
详解react native页面间传递数据的几种方式
2018/11/07 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
python有证书的加密解密实现方法
2014/11/19 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
2015/04/28 Python
python绘制简单彩虹图
2018/11/19 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
selenium+python环境配置教程详解
2019/05/28 Python
python匿名函数用法实例分析
2019/08/03 Python
如何基于Python实现自动扫雷
2020/01/06 Python
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
环境工程专业个人求职信
2013/12/05 职场文书
生日派对邀请函
2014/01/13 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
市场调查策划方案
2014/06/10 职场文书
诚实守信演讲稿
2014/09/01 职场文书
合伙购房协议样本
2014/10/06 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书
MySQL详细讲解变量variables的用法
2022/06/21 MySQL