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程序的循环的运行效率的原因
Apr 01 Python
Python实现HTTP协议下的文件下载方法总结
Apr 20 Python
python3利用tcp实现文件夹远程传输
Jul 28 Python
Python中修改字符串的四种方法
Nov 02 Python
Django 配置多站点多域名的实现步骤
May 17 Python
python字符串分割及字符串的一些常规方法
Jul 24 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
Python中的__init__作用是什么
Jun 09 Python
Python下opencv库的安装过程及问题汇总
Jun 11 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使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
PHP中->和=>的含义及使用示例解析
2020/08/06 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
js left,right,mid函数
2008/06/10 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
jquery加载单文件vue组件的方法
2017/06/20 jQuery
React-intl 实现多语言的示例代码
2017/11/03 Javascript
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
JS抛物线动画实例制作
2018/02/24 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
Python实现的手机号归属地相关信息查询功能示例
2017/06/08 Python
Python输入二维数组方法
2018/04/13 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
python发送多人邮件没有展示收件人问题的解决方法
2019/06/21 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
numpy.array 操作使用简单总结
2019/11/08 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
html5的input的required使用中遇到的问题及解决方法
2018/04/24 HTML / CSS
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
活动邀请函范文
2014/01/19 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python
Python中time与datetime模块使用方法详解
2022/03/31 Python
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技