python如何调用java类
由于python本身为脚本语言,且经常存在调用第三方库的情况,有的时候用java调用python不如用python调用java方便。下面就整理一下在python调用java过程中需要哪些操作。(默认是linux的Ubuntu上调用)
首先linux上的jdk是一定需要安装的,这个过程在这里就不表了,python都是linux自带的,这里默认是python2.7。
安装jpype
python调用java主要是靠在python中importjpype来实现的。
jpype的安装极其容易,在http://jpype.sourceforge.net/中下载JPype-0.5.4.2.zip并将它放置到随便一个文件夹下,笔者给放到了/home/UsrName/jpype/下面,然后在该文件夹下:
unzipJpype-0.5.4.2.zip cdJpype-0.5.4.2 pythonsetup.pyinstall
就安装完成了(如果有报Permissiondenied的错误,请把最后一个指令改为sudopythonsetup.pyinstall),此时可在python中执行:
#python >>>importjpype >>>
Jpype安装完成。
利用Jpype调用Java
我们就简单调用java中自定义函数来举例:
先附上简单的java代码,作用是给定字符串返回加工后的字符串,以及给定两个参数返回两数之和。
publicclassJpypeDemo{ publicstaticStringsayHello(Stringuser){//注意!作为被python调用的接口函数,需要是静态的,否则python 端会报错 return"hello"+user; } publicstaticintcalc(inta,intb){//注意!作为被python调用的接口函数,需要是静态的,否则python 端会报错 returna+b; } publicstaticvoidmain(String[]args){ } }
将其打包为jar文件,这里我将打包好的文件命名为JpypeDemo.jar(不会打包的小伙伴请百度),并将其放置于python脚本所在的目录下。
然后再给出python端使用java的jar包的代码:
importjpype fromjpypeimport* importos.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()
执行上述程序,得到输出:
hellowaw
6
JVMactivityreport:
classesloaded:32
JVMhasbeenshutdown
内容扩展:
python调用java的jar包方法
fromjpypeimport* 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() printso.get_v('name0') printso printso.get_int() shutdownJVM()
到此这篇关于python如何调用java类的文章就介绍到这了,更多相关python调用java类的方法内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!