1 |
pip3 install JPype1 |
1、导入jpype模块
2、python要调用的java的jar包路径
3、获取jvm.dll的文件路径
4、使用jpype开启虚拟机
5、加载java类
6、实例化类
7、调用java方法
8、关闭jvm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import jpype #jar绝对包路径 jar_path = '/Users/qinhaili/Desktop/MathUtil.jar' print(jar_path) #获取默认的 JVM 路径 jvmPath = jpype.getDefaultJVMPath() #启动 JAVA 虚拟机 jpype.startJVM(jvmPath,"-ea",f"-Djava.class.path={jar_path}") #环境测试代码,#成功输出说明安装环境成功 jpype.java.lang.System.out.println( "hello world!" ) #获取java类 java_class = jpype.JClass('MathUtil') #类调用静态方法(类.方法名()) result1 = java_class.sayHello() print(result1) #调用对象方法(类实例.方法名()) #实话java类 class_obj = java_class() result2 = class_obj.add(1,2) print(result2) #关闭JAVA虚拟机 jpype.shutdownJVM() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class MathUtil{
public static String sayHello() { return "Hello How are you"; }
public MathUtil() {
}
public int add(int a, int b) { return a + b; } } |
1、编译得到.class文件
1 |
javac Hello.java |
2、创建jar包
1 |
jar cf xxxx.jar xxx.class |
3、打包必须得有java开发环境哈
Python调用Java的jar包方式
其实调用 Java 的 jar 包代码,和其他外部程序一样,可以使用 Python 的 subprocess 模块或者需要调用 Java 的 API(比如 Jython)来实现。下面是两个示例代码:
使用 subprocess 模块:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import subprocess
java_path = "/usr/bin/java" # Java 的路径 jar_path = "path/to/your/jar/file.jar" # jar 包的路径
# 要执行的命令 cmd = [java_path, "-jar", jar_path]
# 执行 proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = proc.communicate()
# 打印输出和错误 print(out.decode("utf-8")) print(err.decode("utf-8")) |
使用 Jython API:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from java.lang import Runtime
jar_path = "path/to/your/jar/file.jar" # jar 包的路径
# 获取当前 JVM 实例 jvm = Runtime.getRuntime()
# 加载 jar 包 jvm.load(jar_path)
# 调用 jar 包中的方法 result = jvm.callMethod("com.example.YourClass", "yourMethod", arg1, arg2)
# 打印结果 print(result) |
这里假设你已经安装好了 Jython。需要注意的是,这种方式需要在 Jython 中编写代码,而不是 Python,因为 Jython 是一种 Python 解释器,它能够解析 Java 代码。