Python调用Java类完整指南:JPype安装与实战
本文详细讲解在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类的介绍完毕。如需了解更多相关方法,可搜索本站历史文章或继续阅读后续内容,感谢支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













