python如何调⽤java类
由于 python 本⾝为脚本语⾔,且经常存在调⽤第三⽅库的情况,有的时候⽤ java 调⽤ python 不如⽤ python 调⽤ java ⽅便。下⾯就整理⼀下在 python 调⽤ java 过程中需要哪些操作。(默认是 linux 的 Ubuntu 上调⽤)
⾸先 linux 上的 jdk 是⼀定需要安装的,这个过程在这⾥就不表了,python 都是 linux ⾃带的,这⾥默认是 python2.7。
安装 jpype
python 调⽤ java 主要是靠在 python 中 import 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 包的代码:
java调用python模型
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()
_v('name0')
print so
_int()
shutdownJVM()
到此这篇关于python如何调⽤java类的⽂章就介绍到这了,更多相关python调⽤java类的⽅法内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。