2009-03-23 12 views
0

ich diesen Code bin mit meinem Java-Programm öffnen mache ein (sichtbar) CMD-Fenster:CMD-Äquivalent in OSX ausführen?

try { 
      String line; 
      Process p = Runtime.getRuntime().exec("cmd /C start \"Render\" \"" + myPath + "\\punchRender.cmd\""); 
      BufferedReader input = 
        new BufferedReader(new InputStreamReader(p.getInputStream())); 
      while ((line = input.readLine()) != null) { 
      System.out.println(line); 
      jLabel7.setText(line); 

      } 
      input.close(); 
     } catch (Exception err) { 
      err.printStackTrace(); 
     } 

und ich habe versucht worden, um die gleiche Sache mit dem OSX Terminal zu tun, das ist, wo ich bin in diesem Augenblick:

try { 
      String line; 
      Process p = Runtime.getRuntime().exec("sh " + myPath + "/punchRender.sh"); 
      BufferedReader input = 
        new BufferedReader(new InputStreamReader(p.getInputStream())); 
      while ((line = input.readLine()) != null) { 
      System.out.println(line); 
      jLabel7.setText(line); 

      } 
      input.close(); 
     } catch (Exception err) { 
      err.printStackTrace(); 
     } 

Bisher kein Glück :(Irgendwelche Vorschläge die .sh Datei nicht einmal läuft ...

+0

Es würde sehr helfen, wenn Sie den Fehler beschreiben könnten. – mkb

Antwort

2

Ich würde nur sicherstellen, dass Ihr Shell-Skript die Ausführungsbits aktiviert hat und nur den Shell-Skript-Dateinamen übergibt.

Process p = Runtime.getRuntime().exec(myPath + "/punchRender.sh")

Edit:

Ich weiß nicht, Java speziell wenn es trotzdem Dateiberechtigungen für Unix/Linux mit ihm zu setzen, ist das Bit eXecute zu setzen oder wie Zitate zu entkommen. Aber es wäre so etwas wie dieses:

Process chmod = Runtime.getRuntime().exec("chmod u+x \"" + myPath + "/punchRenderer.sh\"")

+0

Dies startet nur einen Bash-Prozess, nicht die Terminal-App. – mkb

+0

Ich schreibe die .sh-Datei mit dem gleichen Programm, kurz bevor es läuft ... Wie kann ich es mit den Ausführungsbits schreiben? – Alan

0

ich nehme an, Sie haben überprüft, dass die .sh Datei ausführbar ist? , nicht wahr?

+0

Das wäre nicht nötig. – mkb

2

Diese funktionieren sollte. Nicht nur der Ausführung des Skripts, sondern ein Terminal öffnen auch:

Process p = Runtime.getRuntime().exec("open -a /Applications/Utilities/Terminal.app \"" + myPath + " /punchRender.sh\"");

+0

Dies wird nicht funktionieren. Das OP versucht, die Ausgabe des Skripts zu erfassen. Process p hier ist der "open" -Befehl, der keine Ausgabe erzeugt. – mkb

+0

Oh sorry ... das habe ich verpasst. – Koraktor

1

Wenn Sie ein neues Terminal-Fenster sichtbar möchten, können Sie nicht die Schale direkt ausgeführt werden. Sie müssen Terminal starten und dann eine Befehlsdatei ausführen, kein Shell-Skript. Ich bin mir nicht sicher, wie schwer es wäre, den stdout dieses Befehls mit Ihrem Java-Prozess zu verbinden. Sie müssen möglicherweise eine andere Möglichkeit finden, die Ausgabe in das Terminal zu bekommen.

Übrigens, ich habe versucht, Ihren Code in einer Klasse auf meinem eigenen Mac zu Hause, und es lief eine .sh-Datei in Ordnung. Ich habe die Java-Klasse von der Kommandozeile ausgeführt. Vielleicht ist es einfach nicht in deinem PATH.

0

Kann ich vorschlagen, dass Sie den Standardfehler sowie als Standardausgabe erfassen und ausgeben. Das sollte Ihnen eine Vorstellung davon geben, was vor sich geht (im Allgemeinen ist es eine gute Übung).

Möglicherweise müssen Sie Standardausgabe und Standardfehler in verschiedenen Threads erfassen, um Blockierungsprobleme zu vermeiden. Siehe here für einen StreamGobbler