当前位置: 首页 > 知识库问答 >
问题:

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

邵轶
2023-03-14

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

从Jython中驱动Java很容易,设置Java是主程序,Jython是从程序也很简单,但如何设置它以使它们能够相互调用并不明显。

官方文档包含了一篇关于这一切的非常长的文章:第10章:Jython和Java集成,这使得这项任务乍一看似乎很难:一对一的对象工厂、松散耦合的工厂,以及使其工作的大量代码。

既然已经有一个Jython解释器在运行,那么应该有一种简单的方法来调用其中的方法,而不必实例化一个新的解释器(就像上面的最后一个链接一样,如果Jython是由Java驱动的,就需要这样做)。真的有这样的办法吗?

共有1个答案

淳于乐池
2023-03-14

本文提出了一个简单的解决方案,下面的示例奏效了。Java:

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
 类似资料:
  • **抱歉,我对python和java都很陌生,所以我可能不认识到这已经得到了回答,只需要根据我的情况进行调整。 本质上,我有一个在python环境中运行的脚本管理器,我需要将数据传递给bonej插件进行分析,然后该插件将返回一个数组,另一个python脚本将使用该数组进行进一步分析。 我已经被引导到jython来实现这一点,但我不知道如何像导入模块一样导入imageJ。 我知道我可以简单地从命令行

  • 问题内容: 我试图使用以下命令从Java 6应用程序调用Jython : 这导致NullPointerException: 有人知道我在做什么错吗? 编辑: 感谢您的回复!我将jython.jar添加到类路径中,并且可以正常运行: 问题答案: 您必须先注册您的引擎。 来自:ScriptEngineManager.getEngineByName: […]首先搜索已注册为句柄的ScriptEngine

  • 我想从java代码调用python并将参数传递给python中的函数。我已经在python中封装了一个函数。但问题是我还在python程序中导入了第三方库skLearning。当我调用测试程序并将值传递给python时,我能够运行代码。但是当我尝试在python代码中使用第三方库,例如skLearning和import时,我得到了以下错误。 我初始化了Python解释器类的对象,然后使用以下命令,

  • 我是(Java/C++/C#)的新手,我也懂Python。我试图用Java创建一个GameEngine,它可以调用Jython脚本,可以访问Java引擎中的方法。 我不知道如何处理这件事。我已经做了几周的研究,没有什么能回答我的问题;即: 如何从由父类执行的JythonScript调用父类中的方法? -------------------------------------------------

  • 问题内容: 我现在正在开发一个框架,其中一部分需要Jython。我只是使用MatPlotLib向其中添加了一些绘图,却没有意识到MatPlotLib与Jython不兼容。由于这两部分是非常孤立的,我可以在Python中运行大多数程序,并将少量信息传递给Jython部分(反之亦然),所以我想知道是否有一种简单的方法可以做到这一点,而保持框架的模块化性质。有想法吗? 问题答案: 我没有将execnet

  • 问题内容: 我想从Java调用R脚本。我已经对该主题进行了google搜索,但是我看到的几乎所有结果都需要我向某些第三方库添加依赖项。任何人都可以向我展示一种在不添加任何依赖项的情况下完成同一件事的好方法吗? 我正在使用Windows计算机,因此也许我可以使用命令行来启动R(如果尚未打开)并运行特定的R脚本。但是我从未写过命令行代码(或从Java调用过),因此我需要代码示例。 我将使用命令行思路包