2015-04-07 137 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