从java调用jython脚本

时间:2017-04-03 07:41:56

标签: java jython

我目前正在使用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);
}

有什么建议吗?

1 个答案:

答案 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代码...