使用Python调用Java第三方库
先说下我都用了哪些库:jpype、jython、pyjnius、py4j。这些库(除了jython是独立的语言)都可以达到Python执行Java代码的作用。而我统统试了个遍。。。
一开始试了一遍,只有jython可以用,其余的都报各种错。但是jython有个缺点,就是没法用编译器执行,因为.java编译后的.class没法再编译器中读取,而jython偏偏要执行的就是.class文件,所以就导致一个现象:在编译器中编写jython代码,然后在DOS中执行代码。。。。显然很无语,不适合项目使用,只能自己玩玩。所以又跑回去继续研究jpype,相对来说jpype的资料能多那么一点点,而且官网也有文档,只不过官网的文档比较过时了,还停留在python2.6和Java6。后来在网上找了很多的资料,其中很多都是直接引用官方的文档,只有少数的原创,而且很多并没有说的很明白,所以一错再错。不过功夫不负有心人,总算还是弄懂了,特写此文章,供大家参考。
配置:Python2.7.13、Java1.8.0_131
.java路径:
Javatest代码:
package com; public class Javatest { public String run(String str){ return str; } public String testParam(String user){ return "Hi,welcome" + user; } }编译后目录(这里的.class是我手动转移的路径,放在bin或者其他目录都可以):
打包成test.jar:
(1)使用.class调用
#-*-coding:utf-8-*- import jpype from jpype import * #获得默认jvm路径,即jvm.dll文件路径 jvmPath = jpype.getDefaultJVMPath() #java扩展包路径 ext_classpath = r"D:codeH5 undemoin" jvmArg = "-Djava.class.path=%s"%ext_classpath print jvmArg if not jpype.isJVMStarted(): #启动Java虚拟机 jpype.startJVM(jvmPath,"-ea",jvmArg) jpype.java.lang.System.out.println("Hello world!") #获取相应的Java类 javaClass = JClass("com.Javatest") javaInstance = javaClass() #调用Java方法 javaInstance.run("123") #关闭jvm jpype.shutdownJVM()注意:这里的ext_classpath指的是.class文件的的引用路径之前的路径,如:
Javatest.class文件的全路径是:D:codeH5 undemosrccomJavatest.class,Javatest类的包路径(看上面的目录结构)是com,所以此处ext_classpath="D:codeH5 undemosrc";JClass的路径就是Javatest类的包路径:JClass("com.Javatest")
(2)使用jar包调用Java类
startJVM(jvmPath, "-ea","-Djava.class.path=test12.jar") JDClass = JClass("com.Javatest") jd = JDClass() jprint = java.lang.System.out.println print jd.run("waw") shutdownJVM()注意:此处的jar用的是相对路径
查看jar包里面的路径:
好了,大概使用方法就到这了,其实这里尤其要注意的就是路径问题,文件路径和类的包路径。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。