6

我希望能够调用已在运行的 Java jar 中包含的某些方法等(保证它将运行)。我找到了 Jython 之类的东西,但它们似乎只能访问 Java 的本机类等。

4

1 回答 1

3

看看这个:从 Python 调用 Java

"您也可以使用 Py4J。首页上有一个示例和大量文档,但本质上,您只需从 Python 代码中调用 Java 方法,就好像它们是 Python 方法一样:

from py4j.java_gateway import JavaGateway

gateway = JavaGateway() # 连接到 JVM

java_object = gateway.jvm.mypackage.MyClass() # 调用构造函数

other_object = java_object.doThat()

other_object.doThis(1,'abc')

gateway.jvm.java.lang.System.out.println('Hello World!') # 调用一个静态方法

与 Jython 不同,Py4J 的一部分在 Python VM 中运行,因此它始终与最新版本的 Python “保持同步”,并且您可以使用在 Jython 上运行不佳的库(例如 lxml)。另一部分在您要调用的 Java VM 中运行。

通信是通过套接字而不是 JNI 完成的,Py4J 有自己的协议(优化某些情况,管理内存等)

于 2012-06-16T16:47:32.547 回答