1

我之前在 StackExchange上问过这个问题。因为它被搁置了,所以我正在关注评论并询问如何解决这个问题。为避免重复自己并复制粘贴解释,请阅读我询问的上一个问题以获取完整详细信息。

我正在尝试为 Java 编写自己的自定义 ScriptEngine。我尝试扩展AbstractScriptEngine并实现ScriptEngineFactory并填写所有最低要求的方法,只是为了测试我是否能够至少开始使用脚本。(请参阅此处的代码)当我运行以下代码时...

public static void main(String[] args) {
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByExtension("sbs"); // <- THIS LINE HERE

    System.out.println(engine);

    try {
        System.out.println(engine.eval("STRING!"));
    } catch (ScriptException e) {
        e.printStackTrace();
    }

manager.getEngineByExtension("sbs");方法返回空值。我也尝试过使用getEngineByMimeType("text/SandboxScript");以及,getEngineByName("SandboxScript");但这些都没有奏效。

有什么我设置不正确的吗?

4

1 回答 1

0

自定义脚本引擎的查找是通过服务提供者机制(参见http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#Service%20Provider),所以必须设置最多可以按名称查找您的班级。在您项目的 META-INF 目录中,如果不存在名为“services”的文件夹,请创建该文件夹。在此文件夹中创建一个名为“javax.script.ServiceEngineFactory”的文件,其中包含您的包/类的行

me.gamefreak0.ss.SandboxServiceEngineFactory

假设您的项目和 META-INF 设置正确,您的 ScriptEngine 现在应该已注册,您应该能够通过名称查找它。

于 2015-03-30T16:57:03.203 回答