我目前正在使用jython和java开发一个简单的hello world程序。
该程序的设计方式是jython方法接受name参数并返回welcome消息。
我的问题是每当我从java访问jython方法时,它会显示 nullponter exception
我的jython脚本(JythonHello.py):
class JythonHello:
def __init__(self, name):
self.name = name
def sayHello(self):
return "Hello "+ self.name
和我的java代码:
public static void main(String[] args) {
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("src/jython/JythonHello.py");
PyObject callFunction = interpreter.get("sayHello");
PyObject result = callFunction.__call__(new PyString("Boban"));
String msg = (String) result.__tojava__(String.class);
System.out.println("output: " + msg);
}
有什么建议吗?
答案 0 :(得分:1)
查看您的代码;你的python代码定义了一个类和一个成员方法:
class JythonHello:
def __init__(self, name): ...
def sayHello(self): ...
似乎您打算调用那个方法:
PyObject callFunction = interpreter.get("sayHello");
PyObject result = callFunction.__call__(new PyString("Boban"));
但请注意:sayHello()
不接受任何参数。该self参数表示您必须在对象上调用它;但没有任何其他参数!
所以,在纯python中你会说:
helloVar = JythonHello("Boban")
helloVar.sayHello()
但是你的java代码尝试将其称为
sayHello("Boban")
所以,真正的答案是:退一步;并重新思考你真正打算做什么;然后编写以这种方式工作的代码。
我首先不在python端添加“class”部分;而是尝试简单地调用一个带字符串参数的函数,例如!
最后:难道你完全走错了路吗? jython的主要点是编写简单的python代码来在正在运行的JVM中执行“调试”工作。您正在编写复杂的Java代码以使用一些python代码...