Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java调用jython方法:can';在导入中找不到模块_Java_Integration_Jython - Fatal编程技术网

从java调用jython方法:can';在导入中找不到模块

从java调用jython方法:can';在导入中找不到模块,java,integration,jython,Java,Integration,Jython,问题陈述:我正在使用PySystemState调用java类中的jython模块,并在其上执行一些方法。现在的问题是,我的jython模块与位于同一jython项目中并行目录中的其他jython模块有一些依赖关系。结果,当我调用目标模块时,它抛出导入异常,表示无法找到依赖模块 my jython项目的结构: jythonproject -src -folder1<has the module which is invoked from java> -folde

问题陈述:我正在使用PySystemState调用java类中的jython模块,并在其上执行一些方法。现在的问题是,我的jython模块与位于同一jython项目中并行目录中的其他jython模块有一些依赖关系。结果,当我调用目标模块时,它抛出导入异常,表示无法找到依赖模块

my jython项目的结构:

jythonproject
  -src
     -folder1<has the module which is invoked from java>
     -folder2 < it has the modules which the module inside folder1 imports with statemet "from folder2 import x"
现在看来,我只导入folder1中的模块,然后让其中的类调用方法。现在,由于该模块具有来自位于folder2中的其他模块的导入,并且它们没有在java代码中加载,因此它无法定位该模块。 现在的问题是,我应该如何在folder2中加载依赖的模块以及我需要的folder1中的模块

伙计们,我注意到还有一件事,文件夹2中的模块导入到我从java调用的模块中,但其中没有类。所以我从java调用的模块有一个我正在调用的类,这个类依赖于一个jython模块,这个模块有一些方法,但它不是一个类。这就是它不起作用的原因,我得到了一个例外

尝试了其他一些事情,结果如下: 情景1: pkg1具有具有class1的模块1 pkg2具有模块2和类2 模块1有一个import=>来自模块2 import class2 现在,当我从java程序中调用class1时,它工作得很好

场景2: pkg1具有具有class1的模块1 pkg2有module2,它有方法定义,没有类 模块1具有来自pkg2导入模块2的导入=> 现在,当我从java程序调用class1时,这会引发异常

结论: 1) 当从java调用jython类时,我们不能使用从包导入。
2) 我们不能从java调用一个jython类,它从一个没有类的模块导入(只是方法定义)。因为jython在这个场景中只允许“从pkg导入”,我们同样会遇到第1点中的问题

您可能需要设置JYTHONPATH。请参见此处的相关问题。

不,那没用。我尝试在JYTHONPATH env变量中将路径添加到“folder2”,但出现了相同的错误
 // Constructor obtains a reference to the importer, module, and the class name
 public JythonObjectFactory(PySystemState state, Class interfaceType, String moduleName, String className) {
     this.interfaceType = interfaceType;
     PyObject importer = state.getBuiltins().__getitem__(Py.newString("__import__"));
     PyObject module = importer.__call__(Py.newString(moduleName));
     klass = module.__getattr__(className);
     System.err.println("module=" + module + ",class=" + klass);
 }