3

我对 jython 的第一次尝试是我在 Eclipse 中使用 pydev 编写的 java/jython 项目。

我创建了一个 java 项目,然后通过 RightClick 项目 >> pydev >> 设置为...将其设为 pydev 项目...你明白了。然后我添加了两个源文件夹,一个用于java,一个用于jython,每个源文件夹都有一个包。我将每个文件夹设置为项目的构建路径。我想我会让你知道这一切,所以希望你能告诉我我是否正确设置了项目。

但真正的问题是:如何将我的 jython 代码制作成类文件,以便 java 代码可以使用它?首选方法是 eclipse/pydev 会自动为我执行此操作,但我无法弄清楚。jython 用户指南中提到的内容暗示这是可能的,但我在任何地方都找不到有关它的信息。

编辑:我确实在这里这里找到了一些信息,但事情进展并不顺利。

我一直在密切关注第二个链接中的指南,但我不知道如何让 jythonc 为我的 python 类创建一个构造函数。

4

2 回答 2

5

Jythonc 不再存在,它已被分叉到另一个名为Clamp的项目中,但话虽如此......

...您可以使用以下方法将您的 python 脚本预编译为 .class 文件:

jython [jython home]/Lib/compileall.py [保存python代码的目录]

来源 - Jython 通讯,2009 年 3 月

当我用 Python 2.7代码向它提供一个文件夹时(知道它会在 Jython 2.5中失败),它确实输出了一个 .class 文件,即使它不起作用。尝试使用您的 Jython 脚本。如果它有效,请告诉我们,因为我很快就会到你那里。

一旦你做到了这一点,将你的命令行语句转换为 PyDev 中可以根据需要调用的外部工具并不难。

于 2010-07-08T18:35:00.473 回答
0

遵循“在不使用 jythonc 的情况下从 Java 访问 Jython”教程之后,可以在 java 代码中使用 jython 模块。唯一棘手的一点是 *.py 模块不会被编译为 *.class 文件。所以它原来是java中的异国脚本。与 jythonc 的 py 模块相比,性能当然可能会下降,但正如我从 jython 社区页面中获得的那样,它们不会支持 jythonc(实际上已经在 jython2.5.1 中删除了它)。

因此,如果您决定采用非 jythonc 方法,那么上述教程是完美的。我不得不稍微修改一下 JythonFactory.java 代码:

String objectDef = "=" + javaClassName + "(your_constructor_params here)";
try {
       Class JavaInterface = Class.forName(interfaceName);

       System.out.println("JavaInterface=" + JavaInterface);

       javaInt = 
            interpreter.get("instance name of a jython class from jython main function").__tojava__(JavaInterface);
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();  // Add logging here
    }
于 2009-10-14T00:29:15.423 回答