700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > JPype入门篇 -- Python调用Java代码并执行“Hello World”

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

时间:2019-10-02 12:20:05

相关推荐

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

目录

前言

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 : /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.printlnjprint(jd.HelloName("Benjamin"))jprint(jd.calc(2,4))# 关闭jvmjpype.shutdownJVM()

3.3 Demo 3

# Demo 3# 调用带路径同目录输出的java class文件# java文件中带package信息,获取eclipse的编译文件必须带路径访问import jpypejpype.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)# 关闭jvmjpype.shutdownJVM()

3.4 Deme 4

# Demo 4# 调用不带路径同目录输出的java class文件# java文件中不带package信息为空,编译命令为:javac HellName.javaimport jpypejpype.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)# 关闭jvmjpype.shutdownJVM()

3.5 Demo 5

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

4.2 Java代码部分

4.3 反编译结构

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。