使用 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))
示例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))