2012-06-16 15 views
6

我希望能够调用某些已包含在正在运行的Java jar中的方法(这可以保证它将运行)。我找到了像Jython这样的东西,但这些东西似乎只能访问Java的本地类等。从Python中调用非本机Java代码

+0

你怎么指望能够从如这样做Java? –

回答

3

看看这个:Calling Java from Python

你也可以使用Py4J上有FrontPage和大量的文件的例子,但本质上,你只需要调用Java方法在你的Python代码,如果他们为Python方法:

from py4j.java_gateway import JavaGateway 

网关= JavaGatew AY()#连接到JVM

JAVA_OBJECT = gateway.jvm.mypackage.MyClass()#调用构造

other_object = java_object.doThat()

other_object.doThis(1, 'ABC' )

gateway.jvm.java.lang.System.out.println( '世界,你好!')#调用静态方法

与Jython相反,Py4J的一部分运行在Python VM中,因此它始终与最新版本的Python保持“最新”,并且您可以使用在Jython上运行良好的库(例如lxml)。另一部分运行在你想调用的Java虚拟机上。

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

+2

来自Py4J网站:“请注意,在执行上面的Python代码之前,必须先启动Java程序。换句话说,Py4J不会启动JVM。“----访问他们的网站:http://py4j.sourceforge.net/index.html – tabchas