Вызовите java метод в python с Jpype - PullRequest
0 голосов
/ 01 апреля 2020

Образец 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

Я пытаюсь вызвать метод square из SampleClass в Python .

Код из справочника Вызов java методов с использованием 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

Любые предложения о том, как исправить это будет здорово.

1 Ответ

1 голос
/ 01 апреля 2020

Использование JClass в вашей тестовой программе некорректно. Java использовал пути к классам, чтобы найти root дерева для поиска методов. Это могут быть либо каталоги, либо файлы jar. Java файлы также должны быть скомпилированы, чтобы не загружать необработанный исходный файл java.

Сначала вы захотите скомпилировать тестовый код в файл класса, используя javac , Допустим, вы сделали это, и он создал C:\\Desktop\\TestProject\\src\\main\\classes\\, который содержит com\\example\\helloworld\\SampleClass.class.

Затем, когда мы запускаем JVM, мы даем ему путь к root из java классов. Вы можете разместить столько каталогов root или файлов 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))
...