从 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
在本地命名空间中,但 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);
我正在尝试使用 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
在本地命名空间中,但 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);