Announcement

Collapse
No announcement yet.

Anderes Programm aufrufen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Anderes Programm aufrufen

    Hallo Experten!
    Ich habe ein Kommandozeilen-Programm in C++
    geschrieben, welches ich in einer grafischen
    Java-Applikation nutzen möchte.

    Wie kann ich also aus einem Java-Programm ein
    anderes Programm starten und zudem dessen
    Ausagbe auf die Standardausgabe auffangen?

    Danke Euch für Eure Hilfe!
    Gruß
    Daniel

  • #2
    Das ist nicht weiter schwer - die Sprache Java stellt zu diesem Zwecke ein paar Klassen (aus dem Package <i>java.lang.*</i>) bereit, die genau für diese Aufgabe zugeschnitten sind; wenngleich die Unterstützung für das Starten externer Prozesse nicht so umfassend ist, wie man das aus anderen Sprachen gewohnt ist (Python, Perl, C etc.).

    Los geht es. Im folgenden Beispielprogramm wird ein Linux-Kommando ("du -ah") ausgeführt. Dieses Kommando kann der Anwender selbstverständlich durch ein eigenes Kommando ersetzen.
    <PRE>
    import java.io.*;
    import java.util.*;

    public class Proc {

    public ArrayList runProc(String command) {

    ArrayList arlist = new ArrayList();

    try {
    Process proc = Runtime.getRuntime().exec(command);
    BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));

    String line;
    while ( (line = br.readLine()) != null) {
    arlist.add(line);
    }

    } catch (Exception ex) {
    System.out.println(ex.getMessage());
    ex.printStackTrace();
    }
    return arlist;
    }

    public static void main (String[] args) {

    try {
    String command = "du -ah"; // Beispielkommando unter Linux
    Proc proc = new Proc();
    ArrayList res = proc.runProc(command);

    for (int i = 0; i < res.size(); ++i) {
    System.out.println((String)res.get(i));
    }

    } catch (Exception ex) {
    System.out.println(ex.getMessage());
    ex.printStackTrace();
    }

    } // end main
    } // end class
    </PRE>
    Die entscheidenen Dinge passieren in der Methode <i>runProc()</i> - die Zeile <i>Process proc = Runtime.getRuntime().exec(command);</i> führt einerseits das gewünschte Kommando (mit <i>exec()</i>) aus und erzeugt gleichzeitig ein <i>Process</i>-Objekt.

    Aus diesem Objekt kann dann vermittelst eines <i>BufferedReader</i> gelesen werden. Anschließend wird die Kommando-Ausgabe in einen Container (in diesem Falle eine <i>ArrayList</i>) gespeichert.

    In der <i>main</i>-Methode befindet sich der Testcode. Und das war es auch schon (allerdings ohne Rücksichtnahme auf OOP-Prinzipien beim Schreiben der Klasse;-)).

    Viel Spass

    Thomas Kaufman

    Comment


    • #3
      Wow! Vielen Dank für die umfassende Hilfe!
      Gruß
      Danie

      Comment

      Working...
      X