0

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

从 Jython 驱动 Java 很容易,而且设置 Java 是主设备而 Jython 是从设备也很简单,但是设置它以便它们可以相互调用的最佳方式并不那么明显。

官方文档中包含了一篇很长的文章:第 10 章:Jython 和 Java 集成,乍一看让这个任务看起来很难:一对一的对象工厂,松散耦合的工厂,还有很多代码要做这行得通。

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

由于已经运行了一个 Jython 解释器,因此应该有一种简单的方法来调用其中的方法,而不必实例化新的解释器(如上面的最后一个链接,如果 Java 正在驱动 Jython,您需要这样做) . 真的有这样的方法吗?

4

1 回答 1

0

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

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

杰通:

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 解释器确保对自身的同步访问......

于 2014-04-19T05:15:06.973 回答