【问题标题】:Call java method in python with Jpype使用Jpype在python中调用java方法
【发布时间】:2020-07-12 19:32:59
【问题描述】:

示例 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

任何有关如何纠正此问题的建议都会很棒。

【问题讨论】:

    标签: python python-3.x jpype


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-01
      • 2012-10-05
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      相关资源
      最近更新 更多