如何利用python中的Jpype运行Java程序

一、为什么要在python中调用java程序

python确实很强大,但他不是万能的,在某些方面需要利用其它语言的优势作为补充,而java语言的优越性不用我多说。另外,有很多实现的功能以及第三方开发的包都是用的java语言。如果再用python语言再去重写一遍,这对于工程和项目需要来说是费时费力。如果能够在python程序中实现java,是一件很美妙的事情。

二、关于JPype

我搜到的在python中的实现方法就是利用jpype,具体如何安装,可以搜其他的教程,这不是本篇文章的重点。

安装好之后下一步就是如何使用了。

这里先给出一个入门级的教程:https://blog.csdn.net/wang8978/article/details/60960641,按照教程你可以实现基本的输出语句。

首先要清楚一点,Jpype并不是要帮你在python里面去写java代码然后编译和执行,而是在python程序中启动jvm,也就是java的虚拟机来运行你已经写好的java程序。所以如果你还安装了eclipse,那么恭喜你,实现流程将会变得非常简单。你要做的主要工作就是:将你写好的java程序打包成jar包,然后在Python中使用它们即可。

关于如何将自己的项目打包成jar包,很多教程里面都有详细的说明

三、我这里重点说一下自己遇到的问题。

1、学过java都知道,一个java文件中只能有一个public类。假如你的一个java文件中还有其他的非public类,如果不是在同一个package里面的话,你是无法通过外部调用来创建该类的对象的。所以在python中导入了你的jar包后,不要在试图直接创建非public类的对象了,都会报错。

2、如果你仔细观察,你会发现网上的帖子教程大多都很简单的输入输出,而且很多都是重复的,一部分原因是使用jpype库的人相对较少,还有一个原因是jpype原作者对该库的使用教程有很少的描述,简单到只有十几行的代码演示。所以使用它的人很多都是自己摸索,当然十分精通java和python的人除外。

3.你的java项目结构一定要尽可能的简单,比如:

如果你的java项目中一定要用到其他第三方的项目时,比如:

*在这个myProject中,用到上面hhh中的几个类,那么在你将myProject进行打包成jar的时候,建议你按照下面的方式打包(当然其他更好的打包方式也可以):

只把你要用到的package打成jar包,然后在其他工程中用到它的时候,可以看到它的结构如下:

四、下面我详细的介绍一下主要基本用法:

1.启动虚拟机

import  jpype as jp
import os

jvmPath="C:/Program Files/Java/jdk1.8.0_192/jre/bin/server/jvm.dll" #虚拟机路径
jarpath = os.path.join(os.path.abspath('.'), 'F:/myjar/')   #你的jar包的路径

if not jp.isJVMStarted():
    jp.startJVM(jvmPath,"-ea", "-Djava.class.path=%s" % (jarpath + 'first.jar'))

这是必备套路,其中"-Djava.class.path=%s" % (jarpath + 'first.jar'))是要用你的jar包()

  • 这个first.jar是我用hhh打的jar包。里面有一个package hhh
  • packeage hhh中有几个class ,

2.引用package,创建public类的对象,调用函数(注意静态方法变量要用类名调用,比如main函数

packet=jp.JPackage("hhh")  
gyy=packet.gyy        #gyy为hhh中的public类
n=gyy()              #n为gyy类的一个对象
gyy.main([])           #调用main函数要使用类名

3.关闭虚拟机

jp.shutdownJVM()

猜你喜欢

转载自blog.csdn.net/explorer9607/article/details/83276526