我第一次尝试jython是一个java / jython项目,我正在用pydev写日食。
我创建了一个java项目,然后通过RightClick项目使其成为一个pydev项目>> pydev>>设定为......你明白了。然后我添加了两个源文件夹,一个用于java,一个用于jython,每个源文件夹都有一个包。我将每个文件夹设置为项目的构建路径。我想我已经让你知道了所有这些,所以希望你能告诉我,不管我是否正确设置项目。
但真正的问题是:如何将我的jython代码制作成一个类文件,以便java代码可以使用它?首选的方法是eclipse / pydev会为我做这个自动,但我无法弄清楚。 jython用户指南中提到的内容暗示它是可能的,但我无法在任何地方找到相关信息。
编辑:我确实找到了一些信息here和here,但事情并不太顺利。
我一直非常密切地关注第二个链接中的指南,但我无法弄清楚如何让jythonc为我的python类创建一个构造函数。
答案 0 :(得分:5)
Jythonc不再存在了,它已被分割到另一个名为Clamp的项目中,但随后说了......
...你可以预编译 你的python脚本到.class文件 使用:
jython [jython home] /Lib/compileall.py [你保留你的目录 python代码]
来源 - Jython Newsletter, March 2009
当我用Python 2.7 代码提供一个文件夹(知道它会在Jython 2.5 中失败)时,它确实输出了一个.class文件,即使它没有功能。尝试使用Jython脚本。如果它有效,请告诉我们,因为我很快就会到达你的位置。
一旦你到目前为止,将命令行语句转换为PyDev中可以根据需要调用的外部工具并不困难。
答案 1 :(得分:0)
在“不使用jythonc从Java访问Jython”教程之后,可以在java代码中使用jython模块。唯一棘手的问题是* .py模块不会被编译为* .class文件。所以事实证明它是java中的异国情调脚本。性能当然可能会降低对jythonc'ed 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
}