Конструктор процессов Java всегда предоставляет данные в потоке ошибок

У меня есть следующий код:

ProcessBuilder pb = new ProcessBuilder(CMD_ARRAY);
process = pb.start();
FrameworkLogger.log("Waiting for 120 seconds");
boolean code = process.waitFor(120, TimeUnit.SECONDS);
System.out.println("code is "+code);
output = getStream(process.getInputStream());
System.out.println("getInputStream:"+output);
error = getStream(process.getErrorStream());
System.out.println("getErrorStream:"+error);


public String getStream(InputStream inputStream) throws Exception {
    StringBuilder sb = new StringBuilder();
    BufferedReader br1 = null;
    String line;
    try {
         br1 = new BufferedReader(new InputStreamReader(inputStream));
        line = null;
        while ((line = br1.readLine()) != null) {
            sb.append(line + System.getProperty("line.separator"));
        }
    } finally {
        br1.close();
    }
    return sb.toString();
}

Я всегда получаю истинный код, но поток из getInputStream () пуст, а желаемый поток находится в getErrorStream (). Почему это могло происходить? Как получить желаемый поток в getInputStream ()?

Разве вам не нужно использовать отдельные потоки для захвата всего вывода потока?

Hovercraft Full Of Eels 08.12.2018 05:36

@HovercraftFullOfEels, можете ли вы уточнить пример кода?

user5155835 08.12.2018 05:37

Сам я обычно создаю класс StreamGobbler, который реализует Runnable для обработки обоих потоков.

Hovercraft Full Of Eels 08.12.2018 05:37
Например
Hovercraft Full Of Eels 08.12.2018 05:38
Другие похожие вопросы
Hovercraft Full Of Eels 08.12.2018 05:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
18
0

Другие вопросы по теме