zoukankan      html  css  js  c++  java
  • 在Python程序中调用Java代码的实现

     《原创不易,转载请标明出处:https://www.cnblogs.com/bandaobudaoweng/p/10785766.html》

    前言

        开发Python程序,需求中需要用到Java代码,Python作为“胶水”语言能够很好的实现这种需求。具体实现的过程如下:

        1.环境准备

      2.环境搭建

      3.实验

    1.环境准备

     我实验过的两种搭配,都成功了,其他的搭配方式没有实验过不敢做过多的陈述,这里以搭配一为实验基础进行描述。

       搭配一:windows 7(64位)+JDK(32位)+Python(32位)+eclipse+pycharm

       搭配二:windows 7(64位)+JDK(64位)+Python(64位)+eclipse+pycharm

     光有以上的还不够,还需要一个作为桥梁的工具包,jpype1,这个工具包可以启动jvm,使java代码依然运行在jvm中。

     实验过程中使用的各个工具的具体版本如下:

       JDK(32位):1.8.0_211

       Python(32位):3.7.2

       jpype1(32位):0.6.3

       eclipse+pycharm是两款开发工具,主要用来编写java和python代码

     2.环境搭建

      1.这里对JDK还有python的安装不做过多的称述。

      2.jpype1的安装:

        ①:使用python自带的pip安装工具在线安装,发现不能正确安装,提示需要Microsoft Visual C++等,放弃。

        ②:使用python自带的pip安装工具离线安装,可以正确安装,但是问题来了,离线的安装包在哪里获取?如下链接可以获取,jpype1(32位):0.6.3。

            链接:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype

          如图:下载对应自己python版本的离包(可以在cmd中键入 python命令查看python版本)(这里我选择倒数第二个,命名中带有amd64是适应python64位的,没有amd64的是适应python32位的)

          

          得到离线包之后,在cmd中使用命令:     pip install   离线包的位置      可以顺利安装。(这里我已经安装过了没有截图,也懒得重新卸载再安装了)

     3.实验

       工具安装完毕之后,接下来看实验代码如何书写,借助eclipse开发java代码,并打jar包。

        ①:开发java代码

        

       ②:打jar包

        

       

        

        经过打jar包之后,获得了jar文件。

        

       ③开发python程序

    # 引入jpype模块
    import jpype
    import os
    
    if __name__ == '__main__':
        """
        基本的开发流程如下:
        ①、使用jpype开启jvm
        ②、加载java类
        ③、调用java方法
        ④、关闭jvm(不是真正意义上的关闭,卸载之前加载的类)
        """
        # ①、使用jpype开启虚拟机(在开启jvm之前要加载类路径)
    
        # 加载刚才打包的jar文件
        jarpath = os.path.join(os.path.abspath("."), "C:\Users\Administrator\Desktop\pythoncalljava-1-0-0.jar")
    
        # 获取jvm.dll 的文件路径
        jvmPath = jpype.getDefaultJVMPath()
    
        # 开启jvm
        jpype.startJVM(jvmPath,"-ea", "-Djava.class.path=%s" % (jarpath))
    
        # ②、加载java类(参数是java的长类名)
        javaClass = jpype.JClass("com.pythoncalljava.JavaClass")
    
        # 实例化java对象
        # javaInstance = javaClass()
    
        # ③、调用java方法,由于我写的是静态方法,直接使用类名就可以调用方法
        javaClass.show()
    
        # ④、关闭jvm
        jpype.shutdownJVM()
    
        pass

       ④运行程序

       

    总结:

       1.如果是调用多个jar文件的话,要在jvm启动时指定jar文件路径,

       jarpath,jarpath2,jarpath3,jarpath4是jar文件路径。

      jpype.startJVM(jvmPath,"-ea", "-Djava.class.path=%s;%s;%s;%s" % (jarpath,jarpath2,jarpath3,jarpath4))

       2.实际上没有真正的停止jvm,jvm随着python程序的退出而结束(JVM has been shutdown是指卸载之前加载的类。)

       

  • 相关阅读:
    关于DOM节点的逆序
    javascript 巧妙的数组去重
    Canvas 学习笔记1
    web前端开发规范
    关于使用new和不使用new
    先知JS分享第二讲 数据类型与操作符
    关于谷歌console的小技巧
    菜鸟读jQuery 2.0.3 源码分析系列(2)
    菜鸟读jQuery 2.0.3 源码分析系列(1)
    local npm module ("*****") not found
  • 原文地址:https://www.cnblogs.com/bandaobudaoweng/p/10785766.html
Copyright © 2011-2022 走看看