当前位置: 首页 > 面试题库 >

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

隆礼骞
2023-03-14
问题内容

我试图使用以下命令从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

问题答案:

您必须先注册您的引擎。

来自:ScriptEngineManager.getEngineByName:

[…]首先搜索已注册为句柄的ScriptEngineFactory […]如果未找到此类工厂,则返回null

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

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

你已经做到了吗?

编辑 关于您的评论:我认为您应该打开一个新问题,您将获得更好的答案。



 类似资料:
  • 我的Jython脚本调用了一些我用Java编写的代码(因为我更喜欢Java多线程)。现在,我需要从Java调用一个Jython方法(否则我必须用Java重写它)。 从Jython中驱动Java很容易,设置Java是主程序,Jython是从程序也很简单,但如何设置它以使它们能够相互调用并不明显。 官方文档包含了一篇关于这一切的非常长的文章:第10章:Jython和Java集成,这使得这项任务乍一看似

  • **抱歉,我对python和java都很陌生,所以我可能不认识到这已经得到了回答,只需要根据我的情况进行调整。 本质上,我有一个在python环境中运行的脚本管理器,我需要将数据传递给bonej插件进行分析,然后该插件将返回一个数组,另一个python脚本将使用该数组进行进一步分析。 我已经被引导到jython来实现这一点,但我不知道如何像导入模块一样导入imageJ。 我知道我可以简单地从命令行

  • 在插件中可以声明一个特殊的脚本文件(场景脚本),该脚本和项目中的脚本 (assets 目录下的脚本)具有相同的环境,也就是说在这个脚本里可以调用引擎 API 和其他项目脚本,实现: 遍历场景中的节点,获取或改动数据 调用项目中的其他脚本完成工作 注册场景脚本 首先在 package.json 里添加 scene-script 字段,该字段的值是一个脚本文件的路径,相对于扩展包目录: { "

  • 我有这样的设置: 所有.飞镖只是导入脚本1.飞镖和脚本2.dart并调用它们的主要。目标是在细节下有一堆可以单独运行的脚本。此外,我想要一个单独的 all.dart 脚本,可以一次运行所有脚本。这将使调试单个脚本更简单,但仍允许所有脚本运行。 all.dart 脚本1.飞镖 脚本2.dart 所以,这是工作,我看到运行时预期的打印语句all.dart但我有两个问题。 首先,我必须在详细信息下软链接

  • 我必须把一个项目从Java8转移到Java17。 我可以解决大多数问题,但它包含一种方法,我使用ScriptEngineManager来计算一个数学术语。 在Java8中,它可以根据需要工作,但在Java17中始终为空。 根据谷歌的说法,Java17不再支持JavaScript引擎。 由于项目限制,我不允许使用第三方库。 在Java17中有没有合适的方法来处理这个问题?

  • 问题内容: 我想从Java调用R脚本。我已经对该主题进行了google搜索,但是我看到的几乎所有结果都需要我向某些第三方库添加依赖项。任何人都可以向我展示一种在不添加任何依赖项的情况下完成同一件事的好方法吗? 我正在使用Windows计算机,因此也许我可以使用命令行来启动R(如果尚未打开)并运行特定的R脚本。但是我从未写过命令行代码(或从Java调用过),因此我需要代码示例。 我将使用命令行思路包