从 Jython 调用方法时出现空指针异常

Nullpointer Exception when calling a method from 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

因为你怀疑你的台词有细微的错误:

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

PythonInterpreter#get(String) returns 来自本地命名空间的变量。 jythonFirst 在本地命名空间中,但 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);