在Mac OS X El Capitan上通过Java编写AppleScript

在Mac OS X El Capitan上通过Java编写AppleScript,java,osx-elcapitan,Java,Osx Elcapitan,在El Capitan之前,java程序可以使用ScriptEngineManager调用AppleScript,如下所示: ScriptEngine se = new ScriptEngineManager().getEngineByName("AppleScript"); 然后使用se.eval方法设置属性并执行脚本 更新到El Capitan后,上面显示的构造函数语句返回null 我正在使用来自Oracle的最新Java8实现。想知道是否有人遇到过这个问题以及如何解决它;dr-重新安装以

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

ScriptEngine se = new ScriptEngineManager().getEngineByName("AppleScript");
然后使用
se.eval
方法设置属性并执行脚本

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

我正在使用来自Oracle的最新Java8实现。想知道是否有人遇到过这个问题以及如何解决它;dr-重新安装以获得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)上运行它时:

Java 7(oracle):

重新安装苹果JRE-

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

现在,针对oracle虚拟机的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]
因此,看起来您需要显式重新安装apple JRE才能在El Cap上获得applescript支持(可能也适用于较旧的版本)

出现AppleScript支持的原因是,当您安装apple提供的JRE时,OSX安装了一系列扩展—这些库位于
/System/Library/Java/extensions
中。其中一个库是
AppleScriptEngine.jar
(它对应于
libAppleScriptEngine.jnilib

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