10

自从我升级到 Mountain Lion 后,我就无法通过 Java ScriptEngineManager 运行我的 AppleScript 代码。

在 Apple 页面 ( link ) 上找到的示例代码为该engine对象返回 null。

public static void main(String[] args) throws Throwable {
    String script = "say \"Hello from Java\"";

    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("AppleScript");
    engine.eval(script);
}

有人知道任何解决方法吗?

4

5 回答 5

4

我在 bugreport.apple.com 上发布了这个问题(错误 ID:12692742)。我收到了这样的回复:

2013 年 2 月 20 日下午 4:21 Apple 开发人员错误报告团队:我们认为您已使用 JavaDeveloper 安装了 Lion。您升级到 Mountain Lion,它(按设计)删除了以前在 /System 下安装的 Java SE 6 的所有痕迹。这在 /Library/Java/JavaVirtualMachines 下留下了一个功能性 SE 6 JDK 包,但 /System/Library/Java/Extensions 的内容不见了。

您可以通过以下几种方式解决此问题:

1)在Mountain Lion系统上重新安装JavaDeveloper包。

2) 通过删除 /Library/Java/JavaVirtualMachines 和 /System/Library/Java/JavaVirtualMachines 下的任何 JDK 包并运行 'java -version' 或 '/usr/libexec/java_home --request' 来为 OS X 重新安装 Java启动按需安装。

3) 从捆绑了 AppleScriptEngine 的 Oracle 安装 Java 7。

在 3 个选项中,#3 是推荐的选项,因为无论如何开发人员都应该转向 Java 7。

于 2013-04-22T16:33:51.727 回答
4

如 ytw 所示,我通过在我的 jar 的“META-INF/services”文件夹中添加一个名为“javax.script.ScriptEngineFactory”的文件来使其工作。

我还必须更改一些代码:语言似乎不再是“AppleScript”而是“AppleScriptEngine”。所以这应该工作:

    public static void main(String[] args) throws Throwable {
        String script = "say \"Hello from Java\"";

        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("AppleScriptEngine");
        engine.eval(script);
    }

至少这适用于我的带有 JDK 1.7.45 的 MacOS X Mavericks ......

于 2014-01-07T16:09:20.733 回答
4

在 Mac OS Yosemite 上,java -version : 1.7.0_40-ea

  1. 而不是 ScriptEngine engine = mgr.getEngineByName("AppleScript"); 你必须使用:

ScriptEngine 引擎 = mgr.getEngineByName("AppleScriptEngine");

  1. 在您的 src 目录中创建目录 META-INF

  2. 在您的 src 目录中创建目录 META-INF/services

  3. 创建文件 META-INF/services/javax.script.ScriptEngineFactory

  4. 在这个文件中有一行:

apple.applescript.AppleScriptEngineFactory

构建并运行应用程序!(顺便说一句,它不是更多的 Java,它是魔法)

于 2014-11-03T13:22:53.830 回答
3

我通过在 Mac OS X 10.7 (Lion) 上从 /System/Library/Java/Extensions/ 复制 AppleScriptEngine.jar 和 libAppleScriptEngine.jnilib 并将其添加到我的类路径中来完成这项工作。

不知道为什么 Apple 在 Mountain Lion 中删除了这些扩展。我在他们的开发者论坛上问过这个问题:link

于 2012-08-30T00:37:13.500 回答
2

AppleScriptEngine 类已经在 rt.jar(Mac OS X 的 Java 7)中。如果您按照此处的信息 ( http://docs.oracle.com/javase/7/docs/api/?javax/script/package-summary.html ) 通过放置一个名为 javax.script 的文件使其“可发现” META-INF/services下的.ScriptEngineFactory,那么它可以不依赖/System/Library/Java/Extensions/中的AppleScriptEngine.jar工作。就个人而言,我认为使用 rt.jar 中已有的内容会更加健壮。

于 2013-06-18T21:12:27.093 回答