2015-04-07 146 views
2

我想用Jython从Java调用我的Python模块中的函数。但我坚持使用Nullpointer Exception。从Jython调用方法时出现空指针异常

这是我的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

当你怀疑你的行是微妙的错误:

PyObject someFunc = interpreter.get("jythonFirst.printAndReturn"); 

PythonInterpreter#get(String)返回从本地命名空间的变量。 jythonFirst在本地namepsace,但printAndReturnjythonFirst。因此,您需要获得对模块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); 
+0

谢谢..!这工作..。 :-) – Erdnase

相关问题