PythonInterpreter导入java类

时间:2015-01-09 00:51:16

标签: java eclipse pydev jython

我有以下文件结构:

src
|___mod
|   |__ __init__.py
|   |__ pycode.py
|   |__ javacode.java
|
|___main
    |__ start.java

pycode.py的内容:

from mod import javacode as jv
...

start.java内,我尝试使用python解释器运行pycode.py

PythonInterpreter py = new PythonInterpreter();
py.exec("from mod.pycode import *");

但是,我收到以下错误:

ImportError: cannot import name javacode

这令人困惑,因为它似乎能够找到包,但由于某种原因无法找到该文件。我事实上已经验证它找到了包,因为如果你提供了错误的包名,它就会抱怨。

为了提供更多信息,我在eclipse上运行Windows程序。我正在使用pydev插件进行eclipse。我已经将项目的bin文件夹添加为pydev的源文件夹(由一个来源建议),我在程序开始时有以下内容:

static {
    PythonInterpreter.initialize(System.getProperties(), PySystemState.getBaseProperties(),
            null);
}

有谁能告诉我如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

它之所以不起作用是因为我将javacode.java放在python包中。

根据书籍Jython Essentials,这样做会将java文件标记为python模块:

  

Jython还允许通过import语句访问Java类和包。 Jython能够通过底层Java虚拟机(JVM)从Java类路径和sys.path中的目录加载类。从概念上讲,您可以认为,为了加载Java类,sys.path中的目录已附加到类路径中。 这意味着不需要使用__init__.py模块在sys.path上标记Java包,因为这会使它们成为Python包。

所以在此之后,我组织了这样的文件:

src
|___pymodules
|   |__ __init__.py
|   |__ pycode.py
|
|___mod
|   |__ javacode.java
|
|___main
    |__ start.java

内部start.java

PythonInterpreter py = new PythonInterpreter();
py.exec("from pymodules.pycode import *");

该程序现在可以在eclipse中完美地执行,甚至在将其变成独立的jar之后