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常用列表数据结构小结
Aug 06 Python
详解Python函数作用域的LEGB顺序
May 14 Python
Pandas标记删除重复记录的方法
Apr 08 Python
python 统计列表中不同元素的数量方法
Jun 29 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
python如何读取bin文件并下发串口
Jul 05 Python
使用python爬取抖音视频列表信息
Jul 15 Python
使用python制作一个解压缩软件
Nov 13 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
python tqdm实现进度条的示例代码
Nov 10 Python
如何用python实现一个HTTP连接池
Jan 14 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+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
2017/12/19 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
详解uniapp的全局变量实现方式
2021/01/11 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
学习python分支结构
2019/05/17 Python
Python tkinter和exe打包的方法
2020/02/05 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
python palywright库基本使用
2021/01/21 Python
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
员工考核管理制度
2014/02/02 职场文书
聚美优品励志广告词
2014/03/14 职场文书
消防安全责任书范本
2014/04/15 职场文书
关于祖国的演讲稿
2014/05/04 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
综合测评自我评价
2015/03/06 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
小学生运动会广播
2015/08/19 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python
MySQL中一条update语句是如何执行的
2022/03/16 MySQL
SQL Server中锁的用法
2022/05/20 SQL Server