10

我正在尝试使用以下方法从 Java 6 应用程序调用 Jython javax.script

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class jythonEx
{
    public static void main (String args[]) throws ScriptException
    {
        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine pyEngine = mgr.getEngineByName("python");
        try {
            pyEngine.eval("print \"Python - Hello, world!\"");
        } catch (Exception ex) {
            ex.printStackTrace();
        }       
    }
}

这导致 NullPointerException:

java.lang.NullPointerException
        at jythonEx.main(jythonEx.java:12)

有谁知道我在这里做错了什么?

编辑:

感谢您的回复!我将 jython.jar 添加到类路径中,它运行正常:

java -cp "./;jython.jar" jythonEx
4

2 回答 2

15

您必须先注册您的引擎。

来自:ScriptEngineManager.getEngineByName

[...] 首先搜索已注册为句柄的 ScriptEngineFactory [...] 如果没有找到这样的工厂,则返回 null

用户指南说要将它与 JSR-223 一起使用,您必须:

从 Jython 2.5.1 开始,JSR 223 的实现捆绑在 jython.jar 中。只需将 jython 添加到您的 CLASSPATH 并请求 python 脚本引擎。

你已经这样做了吗?

编辑 关于您的评论:我认为您应该提出一个新问题,您会得到更好的答案。

于 2010-04-20T00:31:53.893 回答
2

您可能必须为“python”注册一个 ScriptEngineFactory

于 2010-04-20T00:34:19.380 回答