目录

前言

1、Jpype安装

2、Jpype入门使用打印“Hello World”

3、调用JAVA第三方jar扩展包

3.1 Demo 1

3.2 Demo 2

3.3 Demo 3

3.4 Deme 4

3.5 Demo 5

4、实战案例与分析

4.1 Python代码部分

4.2 Java代码部分

4.3 反编译结构


前言

JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足。

Python代码部分为以前的笔记,Java代码暂无记录Demo1-4为练习代码可自行封装,Demo5为实际使用时代码。案例演示Python调用Jar包过程和使用方法。关于调用过程中遇到的问题需多加练习Java基础方法调用和封装需理解方可得心应手的完成日常工作。

Python 调用 Java 推荐3个方案

1、jpype 调用jar包

2、jar 包执行命令行并获取返回值

3、Java 实现Http接口,Python 通过Http调用最终实现调用Java


1、Jpype安装

方法一

whl 文件下载地址

https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud

1、如:JPype-0.6.3-cp37-cp37m-win_amd64.whl,即对应python版本3.7

2、因下载的安装包是wheel格式的,所以先安装wheel,命令:pip install wheel

3、pip install 文件名.whl既可安装

方法二

pip install jpype1


2、Jpype入门使用打印“Hello World”

from jpype import *
import os.path  startJVM("C:/Java/jdk1.6.0_10/jre/bin/client/jvm.dll", "-ea")
java.lang.System.out.println("Hello World")
shutdownJVM() 

PS:jvm.dll文件需要安装JDK环境并找到电脑上对应的文件,使用时注意文件转义字符

3、调用JAVA第三方jar扩展包

坑1:public static String HelloName() 静态方法无法被调用,只能调用非静态方法

坑2:无法获取Java中的Print值,只能获取Return值

3.1 Demo 1

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : Benjamin
# @Time   : 2018/8/3 16:09# Demo 1
# 测试Python 调用 Java 代码
import jpype
# 引用java代码
jpype.startJVM("C:\code_path\java\jre\\bin\server\jvm.dll", "-ea")
jpype.java.lang.System.out.println("hello World")
jpype.shutdownJVM()

3.2 Demo 2

# Demo 2
# 应用第三方jar包
import jpype
# import os.path
# jarpath = os.path.join(os.path.abspath('.'), 'F:/sample_Py/')
# jpype.startJVM("C:\code_path\java\jre\\bin\server\jvm.dll","-ea", "-Djava.class.path=%s" % (jarpath + 'jpypedemo.jar'))
#ubuntu 中startJVM("/home/geek/Android/jdk1.6.0_43/jre/lib/i386/server/libjvm.so","-ea", "-Djava.class.path=%s" % (jarpath + 'XXX.jar'))# 启动JVM并加载jar包,并带入相应的库方法
jpype.startJVM("C:\code_path\java\jre\\bin\server\jvm.dll","-ea", "-Djava.class.path=%s" %'C:\\Users\\xielianshi\Desktop\python\TestPro\helloworld.jar')
JDClass = jpype.JClass("org.na.HelloName")# 实例化对象
jd = JDClass()
#jd = JPackage("jpype").JpypeDemo() #两种创建jd的方法
# 调用java方法
jprint = jpype.java.lang.System.out.println
jprint(jd.HelloName("Benjamin"))
jprint(jd.calc(2,4))# 关闭jvm
jpype.shutdownJVM()

3.3 Demo 3

# Demo 3
# 调用带路径同目录输出的java class文件
# java文件中带package信息,获取eclipse的编译文件必须带路径访问
import jpype
jpype.startJVM("C:\code_path\java\jre\\bin\server\jvm.dll","-ea")
JDClass = jpype.JClass("org.na.HelloName")# 实例化对象
javaInstance = JDClass()#调用JAVA对象的方法
print(javaInstance.HelloName("Benjamin"))
#调用java calc方法
calc = javaInstance.calc(3,4)
print(calc)
# 关闭jvm
jpype.shutdownJVM()

3.4 Deme 4

# Demo 4
# 调用不带路径同目录输出的java class文件
# java文件中不带package信息为空,编译命令为:javac HellName.java
import jpype
jpype.startJVM("C:\code_path\java\jre\\bin\server\jvm.dll","-ea")
JDClass = jpype.JClass("HelloName")# 实例化对象
javaInstance = JDClass()#调用JAVA对象的方法
print(javaInstance.HelloName("Benjamin"))
#调用java calc方法
calc = javaInstance.calc(3,4)
print(calc)# 关闭jvm
jpype.shutdownJVM()

3.5 Demo 5

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : Benjamin
# @Time   : 2018/9/26 10:43from jpype import *
import jpype# 启动JVM并加载jar包,并带入相应的库方法
jpype.startJVM("C:\work_path\java\jre\\bin\server\jvm.dll","-ea", "-Djava.class.path=%s" %'LDSMobileTools-1.0-SNAPSHOT-jar-with-dependencies.jar')# Main()
jd = JPackage("LDSMobileTools").CreatJson()# 调用导入对应的包并实例化对象
# JDClass = jpype.JClass("LDSMobileTools.CreatJson")
# jd = JDClass()# 调用jar包 解密方法
strs = "cQTGIqciucCRiPrf69gHDhQwm5NCPY/BUv9vjjEVegh++ZVONAQ+5eSdwCr5g96dj+AiUf5wQKYFsYsvOGWuMSpL1ZBRi5J31qOTXQkSt6lnqFR65IjFDJcxFS0nsRSBhpHCGVOuIsLg48UofX6HZKQEb6t23gnzHIvKkioVNM3YvzLRve3Id6AeAOjH5KH8rh+pXoqeP4sF8aIkpc3qDa4fqV6Knj+LJwVQ0ttGG50oGovQdcxTW4kLbEYh6wW2ZNHcDcIm7mceK0oVTT7f8bNq884aSZr1eQGd2CwjWsvlu2lkg73IYCYju7+t3KB6eFMP6OFCK+X7L9wqcak/j6TjyIXM4XWYMeKPaBPW0yCz8L7vX/mED5XauueAdMOoQ+/AmBr3aNaIJdUzpdmLA3OZwzhHv2Iawpnkyl9TcdJyYFwlSkFthObBO6uIbn8W+Abm0ST9E6zRfqA6m7N3Ec6nI7WmRQ8U3Jad57cmMMBoZGtpWedxzIuvrUt/XmbCFpbtoeFlahiWFEQdWQrjErNirQ8zYT6hXQvY9yZ/rD6TDd6kVLxGvhYTinSIYmgj8iFcq7p9hlT1C3eL3OwK7A=="
data = jd.decrypted(strs)
print(data)
# 解析json数据获取decrypteddata字段

4、实战案例与分析

4.1 Python代码部分

#!/usr/bin/env python
# -*- coding=utf-8 -*-
__author__ = 'Benjamin'
__CreateAt__ = '2022/7/12-15:58'import jpype#  1.获取jvm.dll 的文件路径
jvmPath = jpype.getDefaultJVMPath()
#  2.开启jvm
jpype.startJVM(jvmPath, "-ea", "-Djava.class.path=%s"%"AbTesing-1.0-SNAPSHOT-jar-with-dependencies.jar")JDClass = jpype.JClass("testAB")
jd = JDClass
a =  jd.testAB("xxxx","xxxx")
print("a",a)jpype.shutdownJVM()

4.2 Java代码部分

4.3 反编译结构

JPype入门篇 -- Python调用Java代码并执行“Hello World”相关推荐

  1. python调用java代码方法

    前言: 公司要测试对外接口,接口中的数据又涉及到加密的问题,而python对加密数据进行位运算后,居然无法逆向位运算回来了(应该是个人能力不够吧),只好调用同事之前用的java代码中的函数去解码了,花 ...

  2. Python调用Java代码部署及初步使用

    Python调用Java代码部署: jpype下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype 下载的时候需要使用Chrome浏览器进行下载 ...

  3. python调用java之Jpype实现java接口

    python实现java接口 概述 java程序 java接口 java测试函数 在python中实现java接口的两种方式 第一种:JImplements JImplements的使用示例 JImp ...

  4. python调用java的方法

    最近自己开发的一套测试平台,因为上游系统经常修改主数据,导致其中一个功能经常失败,要频繁找上游测试帮忙修改数据. 基于此种原因,对于这种过于依赖上游系统的接口,决定放弃直接调上游系统的http请求下发 ...

  5. python调用java方法_python调用java

    一.环境确认: 首先,要确认安装的jdk版本是1.8以上:其次,jdk安装位数与python安装的位数一致,及要么一起64位版本要么一起32版本. (以上2点不满足均会报错,比如:not found ...

  6. python3调用java_Python3-JPype调用Java代码

    原博文 2019-12-31 10:54 − ## JPype调用Java代码 ### 安装所需要的库 ```python pip install JPype1-py3 ``` ### 准备一个jar ...

  7. AOSP6.0.1 launcher3入门篇-解析DeviceProject.java及相关文件

    上一篇文章(AOSP6.0.1 launcher3入门篇-解析launcher.java文件)描述了launcher3的加载过程,本篇文章记录hotseat停靠方向和位置.隐藏页指示器.Folder大 ...

  8. OpenCV快速入门篇(Python实现)

    OpenCV快速入门篇(Python实现) 转载自:https://blog.csdn.net/feilong_csdn/article/details/82750029 本系列python版本:py ...

  9. 绿化版Java11的环境配置与Python调用Java

    绿化Java环境的安装与配置 安装JDK 在Oracle的官网下载: 官方最新版本是16,个人选择下载11版本的zip压缩包:jdk-11.0.6_windows-x64_bin.zip 网盘下载地址 ...

  10. 视频教程-跟着王进老师学开发之Python篇第一季:基础入门篇-Python

    跟着王进老师学开发之Python篇第一季:基础入门篇 教学风格独特,以学员视角出发设计课程,难易适度,重点突出,架构清晰,将实战经验融合到教学中.讲授技术同时传递方法.得到广大学员的高度认可. 王进 ...

最新文章

  1. 交换变量和String类初始化:JAVA入门基础
  2. 一起学spring--我的第一个Spring程序,简单粗暴易懂
  3. KVM虚拟化实践(一)
  4. python3.7怎么安装dlib_python3.7添加dlib模块的方法
  5. 重磅开源人工智能大型场景草图数据集图像检索草图着色编辑和字幕
  6. 数字语音信号处理学习笔记——绪论(2)
  7. Python的gc模块
  8. Ubuntu 14.04 无线网卡驱动安装
  9. const数据成员的初始化
  10. 使用python爬虫批量下载美女图片
  11. delphi 实现科学计数法
  12. C/C++函数库 之 ctype.h
  13. 哲学生活中必背的哲学原理
  14. 奥德赛商务车改装哪一些是必要的?
  15. IDEA使用docker打包镜像
  16. 7-10 黑洞数(20 分)
  17. python 变量大小,进程和内存信息
  18. js中时间戳的各种用法
  19. 清除浏览器缓存的方法(chrome为例)
  20. 关于硬件问题造成的MCU死机,过来人简单的谈一谈

热门文章

  1. mac电脑用计算机名共享打印机,苹果电脑怎么连接共享打印机_苹果电脑连接共享打印机的具体教程-系统城...
  2. 注释 护眼色 绿色 RGB
  3. WPS 国际版 Remove ads
  4. python下载pandas库镜像_下载pandas库
  5. 海思Hi3798MV310机顶盒芯片Datasheet-基本信息
  6. Programer Cat 福利
  7. f1c100s 源码_全志 F1C100S/200S Ucos Kile MDK emwin 408M-ARM9内置DDR 源码
  8. CNC:机械工程之机械制图的几何特征、测量、配合、公差带、图纸标注、公差、配合、表面粗糙度之详细攻略
  9. spss26没有典型相关性分析_如何在SPSS中实现典型相关分析
  10. html实现word分页符,word分页-解析Word——自动分页符与手动分页符