Как показать выполнение команды в консоли и получить доступ к ее выводу в Java - PullRequest
4 голосов
/ 24 марта 2011

У меня есть инструмент командной строки, который запрашивает сервер и печатает состояние отложенных заданий для запуска.Это может занять до 30 секунд.Мне нужно вызвать этот инструмент из Java, и я хочу показать его вывод в текстовой области на моем графическом интерфейсе.Например, предположим, что в Windows команда имеет значение «dir».

Process.getRuntime().exec("cmd /c dir"); блокирует до тех пор, пока команда не завершит ее выполнение, поэтому я подумал, что будет лучше показать команду, выполняющуюся в терминале, затемпрочитайте вывод и покажите его в моей текстовой области для дальнейшего использования.Однако консоль скрыта, и у пользователя создается впечатление, что приложение перестало работать.После долгих исследований я попытался:

cmd /k dir - работает в фоновом режиме и может читать выходные данные, но приложение зависает, так как для этого требуется ключ / k, чтобы окно оставалось открытым, но я не вижучтобы закрыть его.

cmd /c start dir - открывается в новом видимом терминале, работает, но не закрывается.Закрытие вручную не позволяет мне прочитать вывод

cmd /k start dir - тот же результат, что и выше

Мой вопрос: как я могу запустить команду для запуска, увидеть ее выполнение и доступего вывод?

Ответы [ 2 ]

4 голосов
/ 24 марта 2011
Process proc = null;
String[] cmd = { "cmd", "/c", "dir" };
proc = Runtime.getRuntime().exec(cmd);

InputStream inputStream = proc.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

String line;
while ((line = bufferedReader.readLine()) != null)
{
    System.out.println(line);
}
0 голосов
/ 24 марта 2011

Вы можете получить поток ввода / вывода / ошибок, используя процесс методы . но вам нужно получить объект процесса - Process p = Process.getRuntime().exec("cmd /c dir"); см. этот ответ также .

...