Python -- jpype
安装 jpype
如图:直接执行 命令:pip install jpype 可见失败,提示没有版本信息
可以使用 pip search jpype 查看相关版本信息
使用命令 pip install JPype1 进行安装、
安装失败,如下图
解决办法,
1、到指定的网址下载对应的软件安装即可
2、直接下载库文件安装, 推荐在:(python库下载地址(库很丰富,下载速度也很快):http://www.lfd.uci.edu/~gohlke/pythonlibs)
安装方式:cd 到文件所在路径,然后执行 命令 pip install 文件名 具体如下:
启动 Java 虚拟机
并执行简单java程序
如下代码:
#FileName : JpypeDemo.py#Author : Adil#DateTime : 2018/4/12 17:40#SoftWare : PyCharm
importjpypefrom time import *
#获取虚拟机路径
jvmPath =jpype.getDefaultJVMPath()#jpath = r'D:\SProgram\Java\Jdk8\jre\bin\server\jvm.dll'
#可见 获取jvmPath 与 jpath 一样。
print(jvmPath) #D:\SProgram\Java\Jdk8\jre\bin\server\jvm.dll
#启动虚拟机
jpype.startJVM(jvmPath)#判断虚拟机是否启动
print(jpype.isJVMStarted())#调用java程序,执行打印
jpype.java.lang.System.out.println("hello JPype !")#关闭虚拟机
jpype.shutdownJVM()
sleep(5)print(jpype.isJVMStarted())
使用java 中的对象
jpype还支持直接使用编译后的class文件,省去了编译这一环节。
以下是原来的JAVA测试代码
packagecom;public classJavaDemo
{
String value;publicJavaDemo(String value)
{this.value = value+" Java";
}publicString getValue()
{return this.value;
}public voidsay()
{
System.out.println("hello java");
}public static voidmain(String[] args) {
System.out.println("hello world");
}
}
使用 java 编译命令 在当前路径下进行编译,生成class 文件,执行 javac ***.java
python 使用class 文件代码
#FileName : jpype.py#Author : Adil#DateTime : 2018/4/12 19:16#SoftWare : PyCharm
importjpype
jvmPath= jpype.getDefaultJVMPath() #获得系统的jvm路径#启动虚拟机
if notjpype.isJVMStarted():
jpype.startJVM(jvm=jvmPath)#使用JAVA字节码中定义的类,注意包名
javaClass = jpype.JClass('com.JavaDemo')#实例化对象
javaInstance = javaClass('test')#调用JAVA对象的方法
print(javaInstance.getValue())
javaInstance.say()#关闭jvm
jpype.shutdownJVM()
python 引入jar包,代码如下:
#FileName : GetMd5.py#Author : Adil#DateTime : 2018/4/12 20:28#SoftWare : PyCharm
importos.pathimportjpypeclassMd5(object):def __init__(self):
self.jvmPath=jpype.getDefaultJVMPath()
self.fileDir= os.path.realpath(__file__)#获取 jar包路径
self.jarPath = os.path.split(self.fileDir)[0] + r'\jmeter-md5.jar'
print(self.jarPath)#拼接 执行jar 包的路径
self.exejar = '-Djava.class.path=' +self.jarPathdefgetMd5(self,md):#启动 jvm 并执行jar 包
jpype.startJVM(self.jvmPath,self.exejar)#实例化 改jar包中的类
JDClass = jpype.JClass("com.jmeter.md5.GenerateMd5")#jprint = jpype.java.lang.System.out.println
#使用改类的方法
md5 =JDClass.createMD5(md)#jprint ('5555')
#关闭虚拟机
jpype.shutdownJVM()return md5
此例中,同时还使用了JAVA虚拟机启动时的命令行参数,可以订制启动方式
总之
jpype提供了强大而灵活的JAVA虚拟机接口,使得Python的扩展性进一步提升,Python的优雅语法,配上JAVA的工程化性能,可以使开发更加高效。