从Jython调用方法时出现Nullpointer异常

时间:2015-04-07 06:18:11

标签: java python nullpointerexception jython

我正在尝试使用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

1 个答案:

答案 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);