【问题标题】:Call Jython from Java (Jython script calls Java, which then has to callback Jython)从 Java 调用 Jython(Jython 脚本调用 Java,然后必须回调 Jython)
【发布时间】:2014-04-19 05:15:06
【问题描述】:

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

从 Jython 驱动 Java 很容易,而且设置 Java 是主设备而 Jython 是从设备也很简单,但最好的设置方法是什么,以便他们可以调用每个其他。

官方文档中有一篇很长的文章:Chapter 10: Jython and Java Integration,乍一看让这个任务看起来很难:一对一的对象工厂,松散耦合的工厂,以及大量的代码来完成它工作。

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

由于已经运行了一个 Jython 解释器,因此应该有一种简单的方法来调用其中的方法,而不必实例化一个新的解释器(如上面最后一个链接中所示,如果 Java驾驶 Jython)。真的有这样的方法吗?

【问题讨论】:

    标签: java python callback jython multiple-languages


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 2023-03-06
    • 2014-02-22
    • 2011-02-09
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 2012-03-15
    • 2012-12-30
    • 1970-01-01
    相关资源
    最近更新 更多