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

3
在El Capitan之前,Java程序可以使用以下代码通过ScriptEngineManager调用AppleScript:
ScriptEngine se = new ScriptEngineManager().getEngineByName("AppleScript");

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

更新到El Capitan之后,上述构造函数语句返回null

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

1个回答

4

简而言之,重新安装苹果Java支持以恢复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(Oracle):

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

在重新安装苹果JRE后 - 从这个苹果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]

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

看起来你需要明确地重新安装苹果JRE才能在El Cap上获得AppleScript支持(可能也适用于旧版本)。
引起AppleScript支持的原因是,当你安装苹果提供的JRE时,OSX会安装一堆扩展 - 这些库位于/System/Library/Java/Extensions中。其中一个库是AppleScriptEngine.jar(和相应的libAppleScriptEngine.jnilib)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接