由于 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调用java接口或者类_python如何调用java类相关推荐

  1. python中如何调用类_python如何调用java类

    由于 python 本身为脚本语言,且经常存在调用第三方库的情况,有的时候用 java 调用 python 不如用 python 调用 java 方便.下面就整理一下在 python 调用 java ...

  2. python调用第三方接口获取数据_python调用接口,python接收post请求接口(附完整代码)...

    与Scala语言相比,Python有其独特的优势和广泛的应用,python调用接口,因此Spark也推出了PySpark,它在框架上提供了一个使用Python语言的接口,python接收post请求接 ...

  3. python调用第三方接口获取数据_python 接口实现 供第三方调用的例子

    python 接口实现 供第三方调用的例子 实验环境 1.环境问题 python 2.7 以上自带的pyunit bottle 作为一个python的简易服务器 在python安装目录 打开命令窗口( ...

  4. python面向对象编程的三大特性_Python面向对象总结及类与正则表达式详解

    Python3 面向对象 -------------------------------------------------------------------------------- 一丶面向对象 ...

  5. python导入模块以及类_python—模块导入和类

    1.查询模块:按目录依次查找需要导入的模块,模块目录一般在:/usr/lib64/python2.7 In [2]: sys.path Out[2]: ['', '/usr/bin', '/usr/l ...

  6. python语法与java语法的区别_Python语言与java语法的异同之处

    本文主要向大家介绍了Python语言与java语法的异同之处,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.变量 java中定义变量,int a=0;而python中为 a= ...

  7. python元类_Python基础:元类

    一.概述 Python虽然是多范式的编程语言,但它的数据模型却是 纯面向对象 的.与那些仅在语法层面声称纯OO的编程语言(如Java)相比,Python的这种纯粹性更加深入骨髓. 在Python的世界 ...

  8. 第一篇:java调用公共数据接口:QQ在线状态查询(java调用http接口)

    java调用公共数据接口: webxml 前言 一.以webxml上的一个接口为案例 二.查看接口文档 1.查看支持的调用方式 2.确认接口地址与参数 三.编码(找代码直接跳这里!) 1.配置Rest ...

  9. java异步调用微信接口_微信支付V3 SDK(Java版,支持同步异步调用)

    我们在开发微信支付时,发现微信官方已经对SDK做了升级,V3版本的SDK从设计上符合RESTful规范. 我们再在开源库中寻找是否有现成de开箱即用.并且支持响应式编程的SDK版本.经过一凡寻找,令我 ...

  10. python中的元类_python中的元类

    类也是对象,但是类有创建对象的能力 动态创建一个类: classmonkey():defbanana(self):print 'banana!' defapple(self):print 'i wan ...

最新文章

  1. java向某一IP发送消息_javaTCP如何将数据发送给指定IP的客户端(求代码)谢谢! 爱问知识人...
  2. Windows批处理(cmd/bat)常用命令
  3. Vue中前端加密使用RSA加密下的JSEncrypt防止明文暴露
  4. symfony2的中文视频教程更新中(原创),对Symfony感兴趣的学员可以看下
  5. 深度学习工作笔记002---曼哈顿距离_欧氏距离
  6. vue-cli+webpack打包配置
  7. java 读mdb,使用Java / Jackcess从加密的Access .mdb中读取
  8. win10pe系统计算机名修改,pe 重置win10登陆密码怎么操作_如何用pe系统重置win10电脑密码-win7之家...
  9. Vue使用Element UI插件
  10. CSMA/CD和CSMA/CA
  11. 商用字体网站,再也不用怕侵权
  12. Linux文件禁止删除修改,Linux文件保护禁止修改、删除、移动文件等,使用chattr +i保护...
  13. 关于Java的char类型,字符集,字符编码三者的关系
  14. 感恩节,《2012》,尖叫
  15. 计算机硬盘空间不足怎么删,Win10硬盘空间不足?教你这样清理,瞬间多出10个G!...
  16. 云主机磁盘存储动态扩容(LVM)方案
  17. ubuntu将cuda卸载干净
  18. ffmpeg截取视频片段命令优化
  19. 中国星际争霸历史回顾(重写版)
  20. java监听器的原理_[转]Java监听器的原理与实现

热门文章

  1. 最全的微信小程序代码大全
  2. python学习小游戏
  3. JS表格插件(学习使用)
  4. 安川机器人dx200编程手册_【安川 】一文带了解DX200如何编程(上)
  5. java 新手入门电子书_java从入门到精通第6版电子书 PDF高清版
  6. C/C++学校运动会管理系统
  7. 华为企业网络常用图标大全(附PPT下载)
  8. xp系统怎么定时锁定计算机,电脑怎么设置自动锁屏_XP系统电脑怎么设置自动锁屏...
  9. 如何设计实时数据平台(技术篇)
  10. 浅谈Linux操作系统基础知识