java - 在 Mac OS X El Capitan 上通过 Java 使用 AppleScript

标签 java osx-elcapitan

在 El Capitan 之前,java 程序可以使用 ScriptEngineManager 调用 AppleScript,如下所示:

ScriptEngine se = new ScriptEngineManager().getEngineByName("AppleScript");

然后使用 se.eval 方法设置属性并执行脚本。

更新到 El Capitan 后,上面显示的构造函数语句返回 null

我正在使用 Oracle 的最新 Java 8 实现。想知道是否有人遇到过这个问题以及如何解决?

最佳答案

tl;dr - 重新安装 apple java support获得对 applescript 的支持。

您需要实际检查支持哪些脚本引擎。以下代码返回受支持的脚本引擎,而这些是唯一受支持的脚本引擎:

import java.util.List;
import javax.script.*;

public class ListEngines {
        public static void main(String args[]) {
                ScriptEngineManager sem = new ScriptEngineManager();
                for (ScriptEngineFactory factory : sem.getEngineFactories()) {
                        System.out.println(factory.getEngineName());
                        System.out.println(factory.getNames());
                }
        }
}

在 El Cap 上安装 java 6 之前,我收到了两个 Oracle JRE 的以下报告:

当我在 java 8 (oracle) 上运行它时:

 $ /usr/libexec/java_home -v 1.8 -e java ListEngines
Oracle Nashorn
[nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript]

Java 7(甲骨文):

$ /usr/libexec/java_home -v 1.7 -e java ListEngines
Mozilla Rhino
[js, rhino, JavaScript, javascript, ECMAScript, ecmascript]

重新安装苹果 JRE 后 - from this apple URL

Java 6(苹果 - 您必须手动重新安装它):

$ /usr/libexec/java_home -v 1.6 -e java ListEngines
Mozilla Rhino
[js, rhino, JavaScript, javascript, ECMAScript, ecmascript]
AppleScriptEngine
[AppleScriptEngine, AppleScript, OSA]

现在 applescript 支持出现在 oracle VM 上。

$ /usr/libexec/java_home -v 1.8 -e java ListEngines
AppleScriptEngine
[AppleScriptEngine, AppleScript, OSA]
Oracle Nashorn
[nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript]

所以看起来您需要显式地重新安装 apple JRE 才能在 El Cap 上获得 applescript 支持(可能也适用于旧版本)。

The reason that AppleScript support appears, is because there are a bunch of extensions installed by OSX when you install the apple provided JRE - these libraries are in /System/Library/Java/Extensions. One of these libraries is AppleScriptEngine.jar (and it's corresponding libAppleScriptEngine.jnilib).

关于java - 在 Mac OS X El Capitan 上通过 Java 使用 AppleScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32923700/

相关文章:

java - 将一个方法的值返回给另一个方法

mysql - 无法连接到 El Capitan 中的 mysql 服务器

objective-c - 找到位于 NSPoint 位置下最顶层的 NSView 对象

xml - 更新到 Xcode 7.0.1 和 El Capitan 后找不到“libxml/xmlwriter.h”

macos - dylib 库路径并在应用程序中使用它

macos - NSDocumentController openDocument : panel no longer permits access to app iCloud container in OS X 10. 11 El Capitan

java - 在我的对象内传递用户定义的参数时遇到问题

java - JFrame Glasspane 也优于 JDialog,但不应该

java - 从线串中提取最近点索引到给定点?

java - 如何从不同的范围创建对象