Java und AppleScript

Tja, AppleScript in Verbindung mit Java waren bzw. sind in meine Augen ein sehr gutes Gespann. Apple bot extra für diese Zwecke eine Cocoa-Java Bridge an über die man auch auf AppleScript zugreifen konnte.

Doch wer Apple kennt weiß das die Firmenpolitik strikt ist und konsequent ein Schlußstrich gezogen wird, wenn Technologien in Apples Augen veraltet sind oder nicht mehr gebraucht werden. So erging es auch der Cocoa-Java Bridge und diese wurde seit Mac OS X Tiger 10.4 nicht mehr weiter unterstützt.

In Java wurde aber eine Java Scripting API integriert mit der man auch unter anderem wieder auf AppleScript zugreifen kann. Diese nutzt auch der Java-AppleScript-Connector der über einen JNI Wrapper das AppleScript über „osacompile“ in der Kommandozeile ausführt.

Anhand eines kurzen Beispiels mit der Netbeans IDE zeige ich wie man auf AppleScript zugreifen kann.

Zuerst fügen wir die jasconn.jar in den Libraries des neu angelegten Netbeans Projekts hinzu.

Im Netbeans  GUI Editor fügen wir einen Button hinzu der eine Methode ausführt in die wir folgenden kleinen Beispielcode einfügen.
public void callAppleScript() {
      ScriptEngineManager sem = new ScriptEngineManager();
      ScriptEngine e = sem.getEngineByName("jasconn");
      //ScriptEngine e = sem.getEngineByName("AppleScript");
      ScriptEngineFactory f = e.getFactory();
      String[] statements = {
          "tell application \"QuarkXPress Passport\" to set x to get properties of every generic box of document 1",
          "return x",
      };
      String program = f.getProgram(statements);
      try {
          //Rückgabewert
          Object resultOfAppleScript = e.eval(program);
          System.out.println("Result:" + resultOfAppleScript.toString());
      } catch (ScriptException ex) {
          ex.printStackTrace();
      }
  }

Nun die Java App kompilieren auf den Button klicken. Das AppleScript wird ausgeführt und der Rückgabewert wird übergeben und zusötzlich über println() ausgegeben.

Im Beispiel weisen wir QuarkXPress Passport an die Eigenschaften aller generic boxes auszugeben.