我正在尝试使用Jython从Java调用我的Python模块中的函数。但是我被Nullpointer Exception困住了。
这是我的Java代码。
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("import sys\nsys.path.append('myPath')\nimport jythonFirst");
PyObject someFunc = interpreter.get("jythonFirst.printAndReturn");
PyObject result = someFunc.__call__();
String realResult = (String) result.__tojava__(String.class);
System.out.println(realResult);
这里'someFunc'变为空。所以当我调用python函数时,在下一行,我得到了异常。
这是我的Python代码。
print ("I am in Python Program")
def printAndReturn(a):
print ("Printing Passed Value")
print a
return a
答案 0 :(得分:0)
因为你怀疑你的行是微妙的错误:
PyObject someFunc = interpreter.get("jythonFirst.printAndReturn");
PythonInterpreter#get(String)从本地名称空间返回一个变量。 jythonFirst
位于本地名称中,但printAndReturn
位于jythonFirst
下。因此,您需要获得对模块jythonFirst
的引用,然后从那里获得对printAndReturn
函数的引用。如,
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("import sys\nsys.path.append('myPath')\nimport jythonFirst");
PyObject jythonFirst = interpreter.get("jythonFirst");
PyObject someFunc = jythonFirst.__getattr__(Py.newString("printAndReturn"));
PyObject result = someFunc.__call__();
String realResult = (String) result.__tojava__(String.class);
System.out.println(realResult);