Jak sprawdzić czy inny program w Javie działa?

0

Napisałem program w Javie, który tworzy plik .bat a nastepnie uruchamia za jego pomocą inny program w Javie, jak mogę uzależnić dzialanie programu wywołującego od zakończenia działania wywołanego? Znalazłem w internecie kod zamieszczony poniżej, ale nie potrafię go zastosować.

        String line;
try {
    Process proc = Runtime.getRuntime().exec("wmic.exe");
    BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream()));
    OutputStreamWriter oStream = new OutputStreamWriter(proc.getOutputStream());
    oStream.write("process where name='explorer.exe'");
    oStream.flush();
    oStream.close();
    while ((line = input.readLine()) != null) {
                System.out.println(line);
    }
    input.close();
} catch (IOException ioe) {
    ioe.printStackTrace();
}
0

Trzeba było wykazać się inwencją i poczytać dokumentację Process. Klasa jest prosta w użyciu, więc naprawdę to nie jest problem. Patrz exitValue() oraz waitFor().

0
MarekR22 napisał(a):

Trzeba było wykazać się inwencją i poczytać dokumentację Process. Klasa jest prosta w użyciu, więc naprawdę to nie jest problem. Patrz exitValue() oraz waitFor().

Słuszna uwaga. Poszukałem i znalazłem rozwiązanie, które może się komuś przydać:

public class OSExecute {
  public static void command(String command) {
    boolean err = false;
    try {
      Process process =
        new ProcessBuilder(command.split(" ")).start();
      BufferedReader results = new BufferedReader(
        new InputStreamReader(process.getInputStream()));
      String s;
      while((s = results.readLine())!= null)
        System.out.println(s);
      BufferedReader errors = new BufferedReader(
        new InputStreamReader(process.getErrorStream()));
      // Błędy będą sygnalizowane wypisaniem komunikatów i zwróceniem
      // wartości niezerowej do procesu wywołującego:
      while((s = errors.readLine())!= null) {
        System.err.println(s);
        err = true;
      }
    } catch(Exception e) {
      // Dla Windows 2000, który zrzuca wyjątek dla
      // domyślnego interpretera poleceń:
      if(!command.startsWith("CMD /C"))
        command("CMD /C " + command);
      else
        throw new RuntimeException(e);
    }
    if(err)
      throw new OSExecuteException("Błędy przy uruchamianiu " +
        command);
  }
}

Aby uruchomic zewnętrzny program do metody OSExecuteException.command() przekazujemy takie polecenie jakie wpisalibyśmy w wierszu poleceń. getInputStream() przechwytuje standardowe wyjście uruchomionego programu. Rozwiązanie pochodzi z książki "Thinking In Java".

1 użytkowników online, w tym zalogowanych: 0, gości: 1