powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Форматирование вывода getRuntime
9 сообщений из 9, страница 1 из 1
Форматирование вывода getRuntime
    #37848124
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
			Process p = Runtime.getRuntime().exec(command, null);
			p.waitFor();
			message = Integer.toString(p.exitValue()) + "_";
			BufferedReader stdInput = new BufferedReader(new InputStreamReader(
					p.getInputStream()));
			BufferedReader stdError = new BufferedReader(new InputStreamReader(
					p.getErrorStream()));
			while ((s = stdInput.readLine()) != null) {
				message = message + s;
			}
			while ((s = stdError.readLine()) != null) {
				message = message + s;
			}


Ответ вызываемой программы записывается в переменную.
Когда вывожу эту переменную на экран, то теряются переносы строк.
Как сохранить формитирование?
...
Рейтинг: 0 / 0
Форматирование вывода getRuntime
    #37848181
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
readLine() читает строку без самого переноса.

Такая конкатенация в цикле - убивает производительсность в Java.
message = message + s;

Не могу понять почему ваш код вообще работает. p.waitFor(); блокирует поток, и никакая вычитка дальше не будет работать пока дочерний процесс не помрет.

Такие вычитки, обычно, делают в отдельных потоках.

В Java 7 ничего такого городить не нужно. Там есть методы redirect*, которые уже это реализуют.
В Java 6 есть другой метод redirect, который сливает IN и ERR вместе, так что их не нужно вычитывать по отдельности.
...
Рейтинг: 0 / 0
Форматирование вывода getRuntime
    #37848278
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Спасибо за ответ
авторНе могу понять почему ваш код вообще работает. p.waitFor(); блокирует поток, и никакая вычитка дальше не будет работать пока дочерний процесс не помрет. - блокирует на время выполнения внешней программы. Как только она отработает станет доступным лог выполнения.

авторТакая конкатенация в цикле - убивает производительсность в Java.
message = message + s; - Подскажите, как лучше сделать?
...
Рейтинг: 0 / 0
Форматирование вывода getRuntime
    #37848280
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StringBuilder
...
Рейтинг: 0 / 0
Форматирование вывода getRuntime
    #37848286
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Нблокирует на время выполнения внешней программы. Как только она отработает станет доступным лог выполнения.
Это очень интересно, потому что обычно дочерний процесс просто зависает когда он пытается вывести что-то в консоль, но ваш Java код этого ещё не читает. Возможно, как-то вам повезло с процессом и у него жирный внутренний буфер.
...
Рейтинг: 0 / 0
Форматирование вывода getRuntime
    #37848300
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczМаксим Нблокирует на время выполнения внешней программы. Как только она отработает станет доступным лог выполнения.
Это очень интересно, потому что обычно дочерний процесс просто зависает когда он пытается вывести что-то в консоль, но ваш Java код этого ещё не читает. Возможно, как-то вам повезло с процессом и у него жирный внутренний буфер.
С помощью этого кода я запускаю несколько внешних программок: sqlplus, архиватор и т.д. Пока работал нормально.
...
Рейтинг: 0 / 0
Форматирование вывода getRuntime
    #37848370
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убрал p.waitFor(); получил ошибку:
Код: java
1.
2.
3.
4.
Exception in thread "main" java.lang.IllegalThreadStateException: process has not exited
	at java.lang.ProcessImpl.exitValue(ProcessImpl.java:246)
	at jtest_class.execSqlplus(jtest_class.java:96)
	at jtest_class.main(jtest_class.java:170)
...
Рейтинг: 0 / 0
Форматирование вывода getRuntime
    #37848385
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НУбрал p.waitFor(); получил ошибку:
Код: java
1.
2.
Exception in thread "main" java.lang.IllegalThreadStateException: process has not exited
	at java.lang.ProcessImpl.exitValue(ProcessImpl.java:246)


Логично что если процесс не завершен, то и exit code у него отсутствует. Это к вычитке данных отношения не имеет.
...
Рейтинг: 0 / 0
Форматирование вывода getRuntime
    #37848391
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczМаксим НУбрал p.waitFor(); получил ошибку:
Код: java
1.
2.
Exception in thread "main" java.lang.IllegalThreadStateException: process has not exited
	at java.lang.ProcessImpl.exitValue(ProcessImpl.java:246)


Логично что если процесс не завершен, то и exit code у него отсутствует. Это к вычитке данных отношения не имеет.
Туплю, спасибо
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Форматирование вывода getRuntime
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]