2015-10-03 5 views
2

До Эль Капитане, Java программа может вызвать AppleScript с помощью ScriptEngineManager следующим образом:AppleScript с помощью Java на Mac OS X El Capitan

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

, а затем настройки свойств и выполнения сценария с se.eval методом.

После обновления El Capitan, оператор конструктора показано выше возвращает null

Я использую последнюю реализацию Java 8 из Oracle. Удивление, если кто-то испытал эту проблему и как ее решить?

ответ

4

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

Перед установкой Java 6 на El Cap, я получил следующие отчеты для обоих JREs Oracle:

Когда я запускаю его на Java 8 (оракул):

$ /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] 

Так это выглядит, как вам нужно явно переустановить яблоко JRE, чтобы получить AppleScript поддержки на El Cap (вероятно, относится к более ранним релизам также).

Причина, по которой появляется поддержка AppleScript, потому, что есть куча расширений, установленных OSX при установке яблока при условии JRE - эти библиотеки в /System/Library/Java/Extensions. Одна из этих библиотек - AppleScriptEngine.jar (и соответствует libAppleScriptEngine.jnilib).