java - PythonInterpreter导入java类

标签 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

这很令人困惑,因为它似乎能够找到包,但由于某种原因找不到文件。我实际上已经验证它找到了该包,因为如果您提供错误的包名称,它会提示。

为了提供更多信息,我正在 Windows 上的 Eclipse 中运行该程序。我正在使用 eclipse 的 pydev 插件。我已将项目的 bin 文件夹添加为 pydev 的源文件夹(根据一位消息来源的建议),并且在程序开始时有以下内容:

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

任何人都可以告诉我如何解决这个问题吗?

最佳答案

它不起作用的原因是因为我将javacode.java放在了python包中。

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

Jython also allows access to Java classes and packages through the import statements. Jython is able to load classes through the underlying Java Virtual Machine (JVM), both from the Java classpath and from the directories in sys.path. Conceptually, you can think that for the purpose of loading Java classes, the directories in sys.path have been appended to the classpath. This means there is no need to mark Java packages on sys.path with __init__.py modules, because that would make them Python packages.

因此,在此之后,我按如下方式组织文件:

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 后也可以完美执行

关于java - PythonInterpreter导入java类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27852224/

相关文章:

java - android 中的可用字体(来自 context.getAssets() )java

java - 在 IDE 调试器中隐藏堆栈帧(例如 Java9 StackWalker)

eclipse - 无法安装pydev

python - PyDev 代码分析在 Aptana Studio 中不起作用

Java Happens-Before 和线程安全

java - 查找 HashMap 中保存的相邻对象之间的距离

java - tomcat7 maxpermgen错误,总内存与最大内存不匹配

java - 如何在 Windows 上开发 Apple Java Extensions?

java - 创建一个每 x 秒执行一次的方法

eclipse - 如何让 Pygame 与 Pydev 一起工作?