我的Jython脚本正在调用一些我用Java编写的代码(因为我对Java多线程更熟悉)。现在事实证明我需要从Java调用一个Jython方法(否则我必须用Java重新编写它)。
从Jython驱动Java很容易,并且设置起来使Java成为主人并且Jython是奴隶也很简单,但是设置它的最佳方式并不是很明显,以便他们可以调用每个其他
官方文档包含一篇关于所有这些内容的文章:Chapter 10: Jython and Java Integration,这使得任务看起来很难看:一对一的对象工厂,松散耦合的工厂,以及大量代码让它发挥作用。
我发现其他一些资料也有很多细节,但都没有提供任何简单的解决方案:
由于Jython解释器已经在运行,因此应该有一种简单的方法来调用它中的方法,而不必实例化一个新的解释器(如上面的上一个链接,如果Java是你需要做的话)驾驶Jython)。实际上有这样的方式吗?
答案 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解释器确保对它自己的同步访问...