在Mac OS X El Capitan上通过Java编写AppleScript
在El Capitan之前,java程序可以使用在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-重新安装以
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]