从Java调用Jython(Jython脚本调用Java,然后必须回调Jython)

时间:2014-04-19 05:15:07

标签: java python callback jython multiple-languages

我的Jython脚本正在调用一些我用Java编写的代码(因为我对Java多线程更熟悉)。现在事实证明我需要从Java调用一个Jython方法(否则我必须用Java重新编写它)。

从Jython驱动Java很容易,并且设置起来使Java成为主人并且Jython是奴隶也很简单,但是设置它的最佳方式并不是很明显,以便他们可以调用每个其他

官方文档包含一篇关于所有这些内容的文章:Chapter 10: Jython and Java Integration,这使得任务看起来很难看:一对一的对象工厂,松散耦合的工厂,以及大量代码让它发挥作用。

我发现其他一些资料也有很多细节,但都没有提供任何简单的解决方案:

由于Jython解释器已经在运行,因此应该有一种简单的方法来调用它中的方法,而不必实例化一个新的解释器(如上面的上一个链接,如果Java是你需要做的话)驾驶Jython)。实际上有这样的方式吗?

1 个答案:

答案 0 :(得分:0)

This article提出了一个简单的解决方案,以下示例有效。爪哇:

import org.python.core.PyObject;

public class JythonFromJava {
    public void callPO(PyObject po) {
        po.__call__();
    }
}

编译:

$ javac -classpath ".;C:\Programs\jython2_7b1\jython.jar" JythonFromJava.java

的Jython:

import JythonFromJava

def method():
    print "METHOD called"

j = JythonFromJava()
j.callPO(method)

运行它:

$ jython jython_from_java_j.py 
METHOD called

似乎所有这一切都需要。我们确实需要将Jython方法的句柄发送到Java中,作为一种回调,除非在这种情况下它不是异步请求的工具,而是用于语言间请求。


编辑:我不知道多线程会让我们离开的地方。我将从另一个在Java代码中创建并启动的线程调用Jython方法,所以我希望Jython解释器确保对它自己的同步访问...