2012-08-15 38 views
8

自從我升級到Mountain Lion後,我無法通過Java ScriptEngineManager運行我的AppleScript代碼。Java ScriptEngineManager不再適用於Mountain Lion的AppleScript

在Apple頁面上找到的示例代碼(link)對於engine對象返回null。

public static void main(String[] args) throws Throwable { 
    String script = "say \"Hello from Java\""; 

    ScriptEngineManager mgr = new ScriptEngineManager(); 
    ScriptEngine engine = mgr.getEngineByName("AppleScript"); 
    engine.eval(script); 
} 

任何人都知道任何解決方法嗎?

+0

您是否安裝了Java? Apple不再提供MacOSX版本的Java。在終端中嘗試... java -version。這將告訴你,如果你需要安裝Java。 – regulus6633 2012-08-17 18:56:12

+0

是的,Java已安裝。 – dejuknow 2012-08-17 20:27:55

回答

4

我知道它的工作方式是在我的jar文件夾「META-INF/services」中添加一個名爲「javax.script.ScriptEngineFactory」的文件,如ytw所示。

我也必須改變一點代碼:語言似乎不再是「AppleScript」而是「AppleScriptEngine」。所以這應該工作:

public static void main(String[] args) throws Throwable { 
     String script = "say \"Hello from Java\""; 

     ScriptEngineManager mgr = new ScriptEngineManager(); 
     ScriptEngine engine = mgr.getEngineByName("AppleScriptEngine"); 
     engine.eval(script); 
    } 

至少這個工程與JDK 45年7月1日我的MacOS X的小牛隊...

+3

您忘記提及您必須在「META-INF/services/javax.script.ScriptEngineFactory」文件中添加以下行:apple.applescript.AppleScriptEngineFactory – 2014-05-10 02:41:52

+0

您是對的Saeid – Alban 2014-11-17 15:56:25

3

我通過從Mac OS X 10.7(Lion)上的/ System/Library/Java/Extensions /中複製AppleScriptEngine.jar和libAppleScriptEngine.jnilib並將其添加到我的類路徑中來實現此目的。

不知道爲什麼Apple在Mountain Lion中刪除了這些擴展名。我在他們的開發人員論壇上詢問了這個問題:link

+0

你有沒有在論壇上得到任何答覆? (該鏈接現在似乎已經死機。) – qerub 2013-04-21 12:01:16

+2

我收到了他們的bug跟蹤系統的回覆。我已將他們的回覆添加爲單獨的答案。 – dejuknow 2013-04-22 16:33:48

4

我在bugreport.apple.com上發佈了這個問題(bug id:12692742)。我收到以下回復:

2013年2月20日04:21 PM Apple Developer Bug報告團隊: 我們認爲您已經安裝了Lion與JavaDeveloper。您已升級到Mountain Lion,它將(以前設計)刪除/ System下先前安裝的Java SE 6的所有痕跡。這在/ Library/Java/JavaVirtualMachines下留下了一個功能SE 6 JDK捆綁包,但/ System/Library/Java/Extensions的內容不見了。

可以解決此一對夫婦方式:山獅系統

1)重新安裝JavaDeveloper包。

2)通過刪除/ Library/Java/JavaVirtualMachines和/ System/Library/Java/JavaVirtualMachines下的任何JDK軟件包並運行'java -version'或'/ usr/libexec/java_home - - 請求「來啓動按需安裝。

3)從Oracle安裝Java 7,捆綁AppleScriptEngine。

在3個選項中,#3是推薦的選項,因爲無論如何開發人員應該轉向Java 7。

2

AppleScriptEngine類已經在rt.jar(適用於Mac OS X的Java 7)中。 如果您按照這裏的信息(http://docs.oracle.com/javase/7/docs/api/?javax/script/package-summary.html)通過在META-INF/services下放置一個名爲javax.script.ScriptEngineFactory的文件來使其「可發現」,那麼它可以在不依賴AppleScriptEngine.jar的/ System/Library /的Java /擴展/。就我個人而言,我認爲使用rt.jar中已有的功能更加強大。

2

在Mac OS的優勝美地,Java的版本:1.7.0_40-EA

  1. 而不是ScriptEngine engine = mgr。getEngineByName所( 「AppleScript的」);您必須使用:

ScriptEngine engine = mgr.getEngineByName(「AppleScriptEngine」);

  • 在你的src目錄下創建目錄META-INF

  • 在你的src目錄下創建目錄META-INF /服務

  • 創建文件META-INF /服務/的javax.script.ScriptEngineFactory

  • 在這個文件是一個行:

  • apple.applescript.AppleScriptEngineFactory

    構建並運行應用程序! (順便說它不是更多的Java,它是魔術)