使用 Jpype 调用 python 中的 java 方法

Call java method in python with Jpype

示例Java 文件:

package com.example.helloworld;

public class SampleClass {

public static int square(int x){
 return x*x;
}

public static void main(String[] args){
    System.out.println(square(4));

  }

}

Sampleclass.java

的本地路径
C:\Desktop\TestProject\src\main\java\com\example\helloworld\SampleClass.java

我正在尝试从 Python 中的 SampleClass 调用 square 方法。

参考代码 Calling java methods using Jpype:

from jpype import *
startJVM(getDefaultJVMPath(),"-ea")
sampleClass = JClass("C:\Desktop\TestProject\src\main\java\com\example\helloworld\SampleClass.java")

print(sampleClass.square(4))

错误:

java.lang.NoClassDefFoundError

任何关于如何纠正这个问题的建议都会很棒。

您的测试程序中 JClass 的使用不正确。 Java 使用 class 路径定位树的根来搜索方法。这可以是目录或 jar 文件。 Java 文件也需要编译,因此无法加载原始 java 源文件。

首先,您需要使用 javac 将测试代码编译成 class 文件。假设您这样做了,它创建了 C:\Desktop\TestProject\src\main\classes\ 其中包含 com\example\helloworld\SampleClass.class.

然后当我们启动 JVM 时,我们给它 java classes 的根路径。您可以在 classpath 列表中放置任意数量的根目录或 jar 文件。 Java classes 像包名一样用点符号引用,因此这将是 JClass 使用的格式。

一旦你这样做,那么这段代码应该可以工作

from jpype import *
startJVM("-ea", classpath=["C:\Desktop\TestProject\src\main\classes\"])
SampleClass = JClass("com.example.helloworld.SampleClass")

print(SampleClass.square(4))