python调用第三方java包实例
先看结果:
对于python与java的互调,我一开始是用的py4j,但是后来发现在使用方法的时候,不知道如何在python中导入jar包,然后网上的资料也比较少。后来想不出来办法,又看到有Jpype这个东东。博友们说Jpype的安装比较不好安装,容易出错,建议用whl文件安装,我这里pip install jpype,倒是没出现问题,很快就下载好了。
先说一下Jpype,它是一个让python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足。
python端:
os.path.abspath这个函数用来获取当前 python 脚本(即py文件)所在的绝对路径, startJVM是用来开启JVM的,启动java虚拟机,所以在后续的任何 JAVA 代码被调用前,必须先调用此方法启动 Java虚拟机。其中,jvm,用于描述你系统中 jvm.dll 文件所在的路径,这个可以利用函数getDefaultJVMPath()获得。"-Djava.class.path=%s"% jarpath,此处非常关键,能实现在 python 代码中调用第三方Java 扩展包。(这里需要你把jar文件拷贝到python脚本文件的目录下。相应地,jpype.shutdownJVM() 用来关闭 JVM,该函数没有输入参数。当 python 程序退出时,JVM 会自动关闭。JDClass = JClass("basicTools.MathFuns") 是申请一个java类,用来调用方法。
代码:
'''
import jpype from jpype import * import os.path jarpath=os.path.join(os.path.abspath('.'),"MathFuns.jar")#os.path.abspath这个函数用来获取当前 python 脚本所在的绝对路径 print(os.path.abspath('.')) startJVM(getDefaultJVMPath(),"-ea","-Djava.class.path=%s"% jarpath)#"D:/jdk/jre/bin/server/jvm.dll" JDClass = JClass("basicTools.MathFuns") #申请一个java类 jd = JDClass()#实例化 jprint = java.lang.System.out.println #申请 Java 输出类的输出函数 jprint("hello World") jprint(jd.isEqual([1,2,3],[1,4,3]))#调用类的isEqual方法,判断两个数组是否相等 jpype.shutdownJVM()#关闭JVM
java端:
我下载了客户端eclipse,然后将MathFuns包导入在项目中,导入以后,就位于Referenced Libraries文件夹中了,如图所示:
。应该这样导入就好了,点开,可以看到有文件夹basicTools,MathFuns类。说到这里,我之前运行python端的时候出现了总是找不到MathFuns类的错误,找了很久都没有解决。最后竟然在类的前面加了basicTools,才解决了这个错误。所以,这里需注意,看看你是否有这样的一个文件夹。如果有,那就加上,如果没有,那就直接在申请java类的时候,直接写类名就好。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)