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 14 Python
Python模拟登录验证码(代码简单)
Feb 06 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
Python使用wget实现下载网络文件功能示例
May 31 Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 Python
Python 中导入csv数据的三种方法
Nov 01 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 Python
Python帮你识破双11的套路
Nov 11 Python
Python 函数绘图及函数图像微分与积分
Nov 20 Python
python关于调用函数外的变量实例
Dec 26 Python
Python 程序员必须掌握的日志记录
Aug 17 Python
Python可以用来做什么
Nov 23 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
第十节--抽象方法和抽象类
2006/11/16 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
2017/02/27 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
js禁止表单重复提交
2017/08/29 Javascript
two.js之实现动画效果示例
2017/11/06 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
Python在线运行代码助手
2016/07/15 Python
python利用正则表达式提取字符串
2016/12/08 Python
Python中元组,列表,字典的区别
2017/05/21 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
HTML5的新特性(1)
2016/03/03 HTML / CSS
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
化学教师自荐信范文
2013/12/28 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
老师对学生的寄语
2014/04/09 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
班主任寄语2015
2015/02/26 职场文书
中标通知书
2015/04/17 职场文书
暖春观后感
2015/06/08 职场文书
Django操作cookie的实现
2021/05/26 Python
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android