【发布时间】:2012-06-16 16:41:49
【问题描述】:
我希望能够调用已在运行的 Java jar 中包含的某些方法等(保证它将运行)。我找到了 Jython 之类的东西,但它们似乎只能访问 Java 的本机类等。
【问题讨论】:
-
您如何期望能够做到这一点,例如爪哇?
我希望能够调用已在运行的 Java jar 中包含的某些方法等(保证它将运行)。我找到了 Jython 之类的东西,但它们似乎只能访问 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 有自己的协议(优化某些情况,管理内存等)"
【讨论】: