首页 > 编程语言 >在python程序中调用java代码

在python程序中调用java代码

时间:2022-08-26 16:22:10浏览次数:139  
标签:调用 java python jar jvm path jpype

 

Python是一门“胶水”语言,非常灵活多变,但是在一些特殊的时候,也需要调用其它语言来协助实现更多的功能;在公司使用python进行接口测试的时候,会遇到有些接口数据是由公司的开发人员进行自定义的加密算法进行加密的,此时,要开发告诉加密代码是不太可能的。跟开发小哥沟通时,很多时候都是由他给一个jar包,然后剩下的就由测试人员来发挥了。

那python 该如何使用这个jar包呢?

这里给大家介绍的是jpype;

一、什么是Jpype

JPype是一个能够让 python 代码方便地调用 Java 代码的工具;

 

二、安装Jpype

pip install jpype1 (注意:是jpype1哦,这个1请一定不要忘记)

 

三、Jpype的使用流程

Jpype是给python程序员来使用的。他能调用启jar包,其实还是要去启用jvm来对java代码进行运行;所以请确保你的jdk正确安装并配置好环境变量。
基本流程:

①、使用jpype开启jvm

②、加载java类

③、调用java方法

④、关闭jvm(不是真正意义上的关闭,卸载之前加载的类)

举例说明:

1、先写好java代码,并生成jar包;

package com.pyjava.demo;

 

    public class Demo1 {

 

     public int add(int a ,int b) {

   return a+b;

       }

    }

    导出成jar包:pyjava.jar

    2、使用Jpype代码:

    import jpype

    import os

    jarpath = os.path.join(os.path.abspath('.'), '//Users//luoman//file//pyjava.jar')  #定义变量引用jar包的路径

    # 1、开启jvm

    jvmpath = jpype.get_default_jvm_path() #获取jvm的路径,一般情况下由此函数获取就可以

    jpype.startJVM(jvmpath, "-ea", "-Djava.class.path=%s" % (jarpath))  # 使用startJvm()函数 启动jvm  

    # 2、加载java类

    javaclass = jpype.JClass("com.pyjava.demo.Demo1") # 此处要写长类名(包名.类名)

    # 3、调用java方法

    jc = javaclass()   #定义java对象

    sum = jc.add(3,4)  #调用jar包中的函数

    print('两数之和为:',sum)

    # 4、关闭jvm

    jpype.shutdownJVM()

    运行结果:两数之和为:7

 

    也可以直接调用java的api,比如调用java的标准输出语句:

    java.lang.System.out.println("helloworld")

 

四、startJVM() 函数详细说明 

            startJVM() 函数的作用是启动 JAVA 虚拟机 

            jpype.startJVM() 的定义 

                startJVM(jvm, *args) 

            参数说明:

            jvm:描述你系统中 jvm.dll 文件所在的路径,可以直接使用get_default_jvm_path()函数获取默认路径,或者写jvm.dll的绝对路径也可以

            *args:为可选参数,只要是合法的jvm启动参数都可以(大家可以百度一下jvm的启动参数) 

            "-Djava.class.path=%s" % (jarpath) 此处是引用jar包,如果有多个jar包要引用的话可以这么写: 

            -Djava.class.path=%s,%s,%s" % (jarpath1,jarpath2,jarpath3)

 

标签:调用,java,python,jar,jvm,path,jpype
From: https://www.cnblogs.com/xmxit/p/16627913.html

相关文章

  • Java Bean 转换(copy)
    废话不多说上代码importorg.springframework.beans.BeanUtils;importorg.springframework.beans.BeanWrapper;importorg.springframework.beans.BeanWrapperImpl;im......
  • [Javascript] Singleton Pattern
    Source:https://javascriptpatterns.vercel.app/patterns/design-patterns/singleton-patternWiththeSingletonPattern,werestricttheinstantiationofcertainc......
  • Java 基础 - 正则表达式
     一、正则表达式 正则表达式是Java中一门独立的语言,用于检测特定字符串是否符合规则。正则表达式就是用来定义匹配的规则的。1.1规则定义   1.2用法  ......
  • python基本数据类型
    python基本数据类型python基本数据类型有:整型,浮点型,布尔型,复数型,字符串,列表,元组,字典,集合。六大基本数据类型:①.Number(数字)②.String(字符串)③.List(列表)④.Tuple(元组)......
  • java 8 流式 list 求和
    List<User>list=userService.list(wrapper);//int类型intage=list.stream().mapToInt(User::getAge).sum();//long类型longage=list.stream().mapToLong(User::......
  • python 读取json文件
    一个jason文件实例————fcc.json{"organization":"freeCodeCamp","website":"https://www.freecodecamp.org/","formed":2014,"founder":"QuincyLarson","ce......
  • Java_String&ArrayList
    Java_String&ArrayListStringString类概述String概述java.lang.String类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。Java程序中的所......
  • 力扣477(java)-汉明距离总和(中等)
    题目: 两个整数的 汉明距离指的是这两个数字的二进制数对应位不同的数量。给你一个整数数组nums,请你计算并返回nums中任意两个数之间汉明距离的总和。 示例1:......
  • Linux安装python并配置环境变量
    1.获取python3源码我们访问这个网址,就可以看到全部的python下载方式:【https://www.python.org/downloads/】   本人下载的是3.10.6版本   2.安装Python这......
  • Java imap邮件接收与解析
    Propertiesprops=newProperties();props.setProperty("mail.transport.protocol","imap");//使用的协议,imap|pop3props.setProperty("mail.imap.host","smtp......