在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是指卸载之前加载的类。)

   

posted @ 2019-04-30 09:00  刘-刚  阅读(8264)  评论(0编辑  收藏