zoukankan      html  css  js  c++  java
  • Python -- jpype JVM的第三方库使用

    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
    
    import jpype
    
    from time import *
    
    # 获取虚拟机路径
    jvmPath = jpype.getDefaultJVMPath()
    # jpath = r'D:SProgramJavaJdk8jreinserverjvm.dll'
    
    # 可见 获取jvmPath 与 jpath 一样。
    print(jvmPath)  # D:SProgramJavaJdk8jreinserverjvm.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测试代码

    package com;
    public class JavaDemo
    {
        String value;
        public JavaDemo(String value)
        { 
            this.value = value+" Java"; 
        } 
        public String getValue()
        { 
            return this.value;
        }
        public void say()
        {
            System.out.println("hello java");
        }
        public static void main(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
    
    import jpype
    
    jvmPath = jpype.getDefaultJVMPath() # 获得系统的jvm路径
    # 启动虚拟机
    if not jpype.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
    
    import os.path
    import jpype
    
    class Md5(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.jarPath
    
    
        def getMd5(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的工程化性能,可以使开发更加高效。

  • 相关阅读:
    HTML基础
    JavaScript基础
    J2EE技术(六)——JSP
    2011.2—至今年度总结
    J2EE技术(二)——JDBC
    DRP项目总结(一)——项目简介
    CSS基础
    J2EE技术(五)——EJB
    J2EE技术(三)——JMS
    J2EE技术(四)——JavaMail
  • 原文地址:https://www.cnblogs.com/BlueSkyyj/p/8809112.html
Copyright © 2011-2022 走看看