Mac OS X El Capitan上的AppleScript通过Java

时间:2015-10-03 14:30:48

标签: java osx-elcapitan

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

tl; dr - 重新安装apple java support以获得Applecript支持。

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

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />
<div class="navbar">
  <div class="navbar-inner">
    <div class="container-fluid">
      <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>

      </button>
      <a class="brand" href="#">
        <img src="http://placehold.it/320x100/000">
      </a>

      <div class="nav-collapse collapse">
        <ul class="nav">
          <li><a href="index.html">Home</a>

          </li>
          <li><a href="bio.html">Bio</a>

          </li>
          <li><a href="appt.html">Appointments</a>

          </li>
          <li><a href="contact.html">Contact</a>

          </li>
        </ul>
      </div>
      <!--/.nav-collapse -->
    </div>
  </div>
</div>

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

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

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());
                }
        }
}

Java 7(oracle):

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

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

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

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

现在 applescript支持用于oracle VM。

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

所以看起来你需要显式重新安装苹果JRE以获得El Cap上的applescript支持(也可能适用于旧版本)。

  

AppleScript支持出现的原因是,当您安装Apple提供的JRE时,OSX会安装一堆扩展 - 这些库位于$ /usr/libexec/java_home -v 1.8 -e java ListEngines AppleScriptEngine [AppleScriptEngine, AppleScript, OSA] Oracle Nashorn [nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript] 中。其中一个库是/System/Library/Java/Extensions(并且它对应AppleScriptEngine.jar)。