【问题标题】:Calling Python from Java through scripting engine (jython)?通过脚本引擎 (jython) 从 Java 调用 Python?
【发布时间】:2011-02-09 22:27:05
【问题描述】:

我正在尝试使用 javax.script 从 Java 6 应用程序调用 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

【问题讨论】:

  • 第12行是哪一个? pyEngine.eval("");?
  • @ilikeorangutans:是的,这是第 12 行。
  • 没错。我假设 ScriptEngineManager 找不到 python 引擎,但我看不出我做错了什么会导致...

标签: java python jython javax.script


【解决方案1】:

您必须先注册您的引擎。

发件人:ScriptEngineManager.getEngineByName

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

用户指南说to use it with JSR-223你必须:

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

你已经这样做了吗?

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

【讨论】:

  • 不,我从来没有这样做过,谢谢!我之前通过 javax.script 使用了 JavaScript,没有做任何事情,所以我显然错过了这一步。让我现在试试...
  • @griffin 太棒了!可能会这样。让我们知道它是否有效?
  • @griffin 我很高兴!!祝你好运,python + java 集成;)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 2011-08-24
    • 2014-06-25
    • 2014-02-22
    • 2012-02-16
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    相关资源
    最近更新 更多