1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Startprobleme mit Java, AppleScript und iTunes

Dieses Thema im Forum "AppleScript" wurde erstellt von derJan, 16.08.06.

  1. derJan

    derJan Gast

    N'Abend Apfeltalk!

    Ich bin gerade eine bisschen am experimentieren (okay: rumspielen ;)) mit Java und AppleScript. Ich wurde zum Anfang gerne mein iTunes ansprechen. Über google hab ich auf macosxhints.com einen entsprechenden Artikel gefunden. Wenn ich die Klasse jetzt nutzte, dauert es sehr lange (30-60 Sekunden) bis iTunes angesprochen wird. Der Quelltext ist 1:1 von macosxhints.com übernommen und wurde nur noch mit einer statischen main-Methode von mir ausgestattet.
    Code:
    import com.apple.cocoa.foundation.*;
    
    public class iTunesControl {
    
      public void play() {    doScript("tell application \"itunes\" to play"); }
      public void pause() {   doScript("tell application \"itunes\" to pause"); }
      public void next() {    doScript("tell application \"itunes\" to next track"); }
      public void previous() {doScript("tell application \"itunes\" to previous track"); }
      
      private void doScript(String script) {
            
        // This creates a new NSAppleScript
        // object to execute the script
        NSAppleScript myScript = new NSAppleScript(script);
    
        // This dictionary holds any errors that are
        // encountered during script execution
        NSMutableDictionary errors = new NSMutableDictionary(); 
    
        // Execute the script!
        myScript.execute(errors); 
      }
      
      public static void main( String [] args )
      {
         iTunesControl a = new iTunesControl();
         a.pause();
       }
    }
    Der Build Prozess wurde mit folgenden Befehlen durchgeführt.

    Code:
    # export CLASSPATH=/System/Library/Java:
    # javac iTunesControl.java
    # java iTunesControl
    Hat vielleicht jemand eine Idee wo mein Fehler liegt?
    Danke für's grübeln :)

    Jan
     
  2. derJan

    derJan Gast

    Vielleicht ist noch ganz interessant zu wissen, dass nur der erste Befehl so lange zum Laden braucht (hab ich eben erst rausgefunden). Wenn ich hinter das a.pause() gleich ein a.next() setze, dauert es erst seine Zeit bis die Musik stoppt und gleich dannach wird auf das nächste Lied gesprungen.

    Kann es sein, dass bei dem Verbindungsaufbau mit iTunes irgendwas schief läuft?
    Jan
     
  3. Peter Maurer

    Peter Maurer Carmeliter-Renette

    Dabei seit:
    16.03.04
    Beiträge:
    3.274
    Mal 'ne Java-Laien-Frage: Sollte die main-Funktion nicht eine geschweifte Klammer weiter draussen sein? Oder ist es Absicht, dass die innerhalb der iTunesControl-Klasse definiert ist?

    EDIT: Danke MatzeLoCal (s.u.)!
     
    #3 Peter Maurer, 18.08.06
    Zuletzt bearbeitet: 18.08.06
  4. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Nö, main() muss in der "Ladeklasse" sein.

    Code:
    public class MeineKlasse {
    
        public static void main(String[] args) {
         //hier passiert was
        }
    }
    
    ist das Standardgerüst.
     
  5. MacMark

    MacMark Biesterfelder Renette

    Dabei seit:
    01.01.05
    Beiträge:
    4.709
    Deine Java-Klasse wird so nicht gefunden. Probier mal
    java ./iTunesControl
    wenn du in deren Verzeichnis bist.
     
  6. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Also ich kann nur sagen, dass das bei mir alles super funzt...
     
  7. derJan

    derJan Gast

    Erstmal danke an alle die sich gedanken zu dem Problem gemacht haben.

    Code:
    $ java ./iTunesControl
    Exception in thread "main" java.lang.NoClassDefFoundError: //iTunesControl
    Die Klasse wird schon gefunden. Wenn ich mit System.out.println ein paar Debug-Meldungen mit einfügt, dann werden die auch brav, bis zum myScript.execute() in doScript(), ausgeführt.

    Ich hab mir nochmal die Kommentar zu dem oben angegebenen Artikel durchgelesen. Ganz unten (Überschrift: " doesnt work for me") beschreibt auch jemand, dass es bei ihm klappt, wenn iTunes nicht gestartet ist. Das ist bei mir auch der Fall. Kann es sein, dass die Java/Applescript Schnittstelle etwas buggy ist? Wenn ich die Applescript Befehle bei geöffnetem iTunes im ScriptEditor ausführe, funktioniert es nämlich ...
    Gibt es evtl noch Java Debug-Methoden, welche mir die einzelnen Schritte, bei der Kommunikation mit Applescript, ausgeben?

    Jan
     
  8. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Nö nö, das ./ kannst Du dir sparen.. das ist nicht von nöten.
     
  9. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    So, im Anhang ist nun mal die .java und die .class die ich daraus kompiliert habe.

    Wie gesagt, alles von oben copy&paste. ... nach dem aufruf von

    java iTunesControl dauert es einen klitzekleinen Moment (java muss ja gestartet werden) und dann is iTunes ruhig.
     

    Anhänge:

  10. derJan

    derJan Gast

    Wenn ich deine Java-Class starte, geht iTunes sofort auf pause, allerdings nur beim ersten mal.
    Was mir allerdings gerade einfällt: welche Java-Version benutzt du? Ich bin irgendwann glaub ich mal manuell auf Java 1.5 gegangen. Kann es evtl daran liegen?
    Code:
    $ java -version
    java version "1.5.0_06"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-112)
    Java HotSpot(TM) Client VM (build 1.5.0_06-64, mixed mode, sharing)
    Jan
     
  11. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Code:
    % java -version
    java version "1.5.0_06"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-112)
    Java HotSpot(TM) Client VM (build 1.5.0_06-64, mixed mode, sharing)
    
    Wie "nur beim erstmal"?

    Pausiger als Pause geht doch nicht, oder :)
     
  12. derJan

    derJan Gast

    Doch es geht :)
    Wenn ich das Programm zum ersten mal starte und iTunes spielt, dann geht er nach 1-2 Sekunden auf Pause. Wenn ich dann iTunes wieder von Hand auf Play stelle und das Programm erneut starte, dann dauert es wieder eine Ewigkeit ...
    Ein sehr merkwürdiges Problem. Irgendwo meine ich auch gelesen zu haben, dass Apple die Java Schnittstelle nicht mehr Supportet, stimmt das?

    Jan
     

Diese Seite empfehlen