python如何调用java类


Posted in Python onJuly 05, 2020

由于 python 本身为脚本语言,且经常存在调用第三方库的情况,有的时候用 java 调用 python 不如用 python 调用 java 方便。下面就整理一下在 python 调用 java 过程中需要哪些操作。(默认是 linux 的 Ubuntu 上调用)

首先 linux 上的 jdk 是一定需要安装的,这个过程在这里就不表了,python 都是 linux 自带的,这里默认是 python2.7。

安装 jpype

python 调用 java 主要是靠在 python 中 import jpype 来实现的。

jpype 的安装极其容易,在 http://jpype.sourceforge.net/ 中下载 JPype-0.5.4.2.zip 并将它放置到随便一个文件夹下,笔者给放到了/home/UsrName/jpype/ 下面,然后在该文件夹下:

unzip Jpype-0.5.4.2.zip
cd Jpype-0.5.4.2
python setup.py install

就安装完成了(如果有报 Permission denied 的错误,请把最后一个指令改为 sudo python setup.py install),此时可在 python 中执行:

#python
>>>import jpype
>>>

Jpype 安装完成。

利用 Jpype 调用 Java

我们就简单调用 java 中自定义函数来举例:

先附上简单的 java 代码,作用是给定字符串返回加工后的字符串,以及给定两个参数返回两数之和。

public class JpypeDemo {

  public static String sayHello(String user){ //注意!作为被 python调用的接口函数,需要是静态的,否则 python 
  端会报错
    return "hello" + user;
  }
  public static int calc(int a, int b){  //注意!作为被 python 调用的接口函数,需要是静态的,否则 python 
  端会报错
    return a + b;
  }
  public static void main(String[] args){ 
  }
}

将其打包为 jar 文件,这里我将打包好的文件命名为 JpypeDemo.jar(不会打包的小伙伴请百度),并将其放置于 python 脚本所在的目录下。

然后再给出 python 端使用 java 的 jar 包的代码:

import jpype
from jpype import *
import os.path
jarpath = os.path.abspath('.')    #这个函数用来获取当前 python 脚本所在的绝对路径
startJVM("/usr/local/java/jdk1.8.0_181/jre/lib/amd64/server/libjvm.so", "-ea", 
"-Djava.class.path=%s" % (jarpath + '/JpypeDemo.jar'))

这个 startJVM 函数作用是加载 Java 虚拟机,其第一个参数必须是你的 Java 的 jdk 的安装位置,每个人的安装位置不一样,我的地址就是上面加粗的那一段(注!!!有的教程上说可以直接通过 getDefaultJVMPath() 函数获取 Java 地址,不建议用!不建议用!不建议用!因为这个函数获得的地址很有可能是电脑自带的 oracle 版的 Java,并非我们自己安装的 Java,这样由于环境变量的问题会导致报错!); 第二个参数意译不明,反正加上就对了 ; 第三个参数是你打包好的 jar 包所在的绝对路径,可以看到我将 JpypeDemo.jar 和前面所得到的当前目录的路径结合起来

JDClass = JClass("JpypeDemo")    #申请一个 Java 类(神奇~)
jd = JDClass
jprint = java.lang.System.out.println #申请 Java 输出类的输出函数
jprint( jd.sayHello(" waw ") )   #调用该类中的 sayHello 函数,并用 Java 输出函数打印 Java 返回值
jprint( jd.calc(2, 4) )    #调用该类中的求和函数,并用 Java 输出函数打印 Java 返回值
#关闭 Java 虚拟机,可写可不写,不写会在程序结束时自动关闭
shutdownJVM()

执行上述程序,得到输出:

hello waw

6

JVM activity report:

classes loaded: 32

JVM has been shutdown

内容扩展:

python调用java的jar包方法

from jpype import *
jvmPath = getDefaultJVMPath()

jars = ["./Firstmaven-1.0-SNAPSHOT-jar-with-dependencies.jar"]jvm_cp = "-Djava.class.path={}".format(":".join(jars))
startJVM(jvmPath,jvm_cp)
sedisObj = JClass("LogBack")
so = sedisObj()
print so.get_v('name0')
print so
print so.get_int()
shutdownJVM()

到此这篇关于python如何调用java类的文章就介绍到这了,更多相关python调用java类的方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python删除空文件和空文件夹的方法
Jul 14 Python
python中string模块各属性以及函数的用法介绍
May 30 Python
python3 实现的人人影视网站自动签到
Jun 19 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
python中实现k-means聚类算法详解
Nov 11 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
Feb 07 Python
Sanic框架配置操作分析
Jul 17 Python
python 的 openpyxl模块 读取 Excel文件的方法
Sep 09 Python
Python ATM功能实现代码实例
Mar 19 Python
用Python开发app后端有优势吗
Jun 29 Python
PyQt5通过信号实现MVC的示例
Feb 06 Python
Python基础教程,Python入门教程(超详细)
Jun 24 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 #Python
如何清空python的变量
Jul 05 #Python
增大python字体的方法步骤
Jul 05 #Python
树莓派升级python的具体步骤
Jul 05 #Python
Python OpenCV去除字母后面的杂线操作
Jul 05 #Python
使用OpenCV去除面积较小的连通域
Jul 05 #Python
学python最电脑配置有要求么
Jul 05 #Python
You might like
用函数读出数据表内容放入二维数组
2006/10/09 PHP
joomla内置的表单验证功能使用方法
2010/06/11 PHP
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
微信支付开发发货通知实例
2016/07/12 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
谈谈JavaScript自定义回调函数
2015/10/18 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
2017/04/28 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
Python实现简单的四则运算计算器
2016/11/02 Python
python 容器总结整理
2017/04/04 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
python如何实现代码检查
2019/06/28 Python
简单了解Python3里的一些新特性
2019/07/13 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
django中使用POST方法获取POST数据
2019/08/20 Python
python简单实现插入排序实例代码
2020/12/16 Python
网络工程师职业规划
2014/02/10 职场文书
北京奥运会口号
2014/06/21 职场文书
中学教师读书笔记
2015/07/01 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技