繁体   English   中英

PythonInterpreter导入Java类

[英]PythonInterpreter importing java classes

我具有以下文件结构:

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

pycode.py的内容:

from mod import javacode as jv
...

里面start.java ,我尝试运行pycode.py与Python解释器。

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

但是,出现以下错误:

ImportError: cannot import name javacode

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

为了提供更多信息,我正在Eclipse的Windows上运行该程序。 我正在使用pydev插件进行日食。 我已将项目的bin文件夹添加为pydev的源文件夹(如一个源所建议),并且在程序开始时具有以下内容:

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

谁能给我一个解决方法的想法?

它不起作用的原因是因为我将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中之后,都可以完美执行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM