通过脚本引擎(jython)从Java调用Python?

10 投票
2 回答
18800 浏览
提问于 2025-04-15 21:48

我正在尝试在一个Java 6的应用程序中使用 javax.script 来调用Jython:

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

2 个回答

2

你可能需要为'python'注册一个脚本引擎工厂。

15

你需要先注册你的引擎。

来自:ScriptEngineManager.getEngineByName:

[...] 首先会寻找一个已经注册的 ScriptEngineFactory [...] 如果没有找到这样的工厂,就会返回 null

用户指南提到,要和 JSR-223 一起使用,你需要:

从 Jython 2.5.1 开始,JSR 223 的实现已经包含在 jython.jar 中。只需将 jython 添加到你的 CLASSPATH 中,然后请求 Python 脚本引擎。

你已经这样做了吗?

编辑 关于你的评论:我觉得你应该开一个新问题,这样能得到更好的答案。

撰写回答