在 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 isAppleScriptEngine.jar
(and it's correspondinglibAppleScriptEngine.jnilib
).
关于java - 在 Mac OS X El Capitan 上通过 Java 使用 AppleScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32923700/