Python调用Java类完整指南:JPype安装与实战

凌晨两点半
凌晨两点半
发布时间:2026-10-14 | 6人浏览过
原创

本文详细讲解在Linux环境下如何通过JPype库实现Python调用Java类。内容涵盖JPype的安装步骤、startJVM函数的正确配置方法(强调避免使用getDefaultJVMPath),以及通过静态接口调用Java方法的完整代码示例,包括Jar包打包与路径设置。

Python调用Java环境准备

Python作为脚本语言,常需调用第三方库。在某些场景下,通过Python调用Java比反向调用更为便捷。以下整理在Linux Ubuntu环境下实现Python调用Java的具体操作步骤。

首先,Linux系统必须已安装JDK。此处省略JDK安装过程,默认系统已预装Python 2.7环境。

JPype库安装步骤

安装JPype库。

Python调用Java的核心在于导入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实战

利用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){ 
  }
}

将上述Java代码打包为Jar文件,命名为JpypeDemo.jar(打包方法可参考网络教程),并将其放置在与Python脚本相同的目录下。

接下来展示Python端调用该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虚拟机。其第一个参数必须指定为当前机器JDK的安装路径,具体路径因人而异,例如文中使用的路径。注意:部分教程建议使用getDefaultJVMPath()函数自动获取Java地址,但强烈不建议这样做!因为该函数可能返回系统自带的Oracle版Java路径,而非用户自定义安装的版本,这往往因环境变量问题导致报错;第二个参数含义不明,但添加即可;第三个参数为打包好的Jar包绝对路径,需将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()

执行上述Python程序,预期输出结果如下。

hello waw

6

JVM activity report:

classes loaded: 32

JVM has been shutdown

Python调用Java Jar包扩展

内容扩展。

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 相关产品和应用

全部下载

专题列表