powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как дождаться заверщения процесса
20 сообщений из 20, страница 1 из 1
Как дождаться заверщения процесса
    #38480670
Oksana Palun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая у меня случилась сложность: запускаю через Runtime в cmd svn комманду, открывается cmd и висит, но вот статус он выдает как будто он уже завершился. Вопрос: как же дождаться его реального завершения и почему он так нагло врет? :(
Решала с помощью потоков и простого ожидания процесса:
Код: java
1.
2.
3.
                runtime = Runtime.getRuntime();
                process = runtime.exec(str);
                process.waitFor();


Результат одинаков: окошко висит, а мы уже вовсю пошли на дальнейшее выполнение...
Буду благодарна идеям.
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38480777
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потоки ввода-вывода надо вычитывать. Либо использовать ProcessBuilder+Java 7 с редиректом в System.out/System.in
Откуда вы видите "статус он выдает как будто он уже завершился", если у вас всё висит?
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38480977
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую ProcessBuilder + waitFor - все ждет корректно, проблем пока не встречал.
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38480997
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПотоки ввода-вывода надо вычитывать.

Как всегда в точку. Было у меня такое, и именно с свн
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38481496
Oksana Palun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczОткуда вы видите "статус он выдает как будто он уже завершился", если у вас всё висит?
у меня не все висит, а сам cmd, но метод, в котором он запускается, возвращает "успешное завершение" практически сразу же после запуска и выполнение идет дальше, а cmd-шник живет своей жизнью, в том то и проблема...
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38481498
Oksana Palun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никBlazkowiczПотоки ввода-вывода надо вычитывать.

Как всегда в точку. Было у меня такое, и именно с свн
Как решили? Что с теми потоками дальше делать?
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38481514
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oksana PalunКак решили? Что с теми потоками дальше делать?
Java 7 установлена? JavaDoc ProcessBuilder прочитан?

Вот статья по теме. Актуальна, до Java 7. В Java 7 проблема та же, но решение проще.
http://www.javaworld.com/jw-12-2000/jw-1229-traps.html
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38481518
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, это же в JavaDoc класса Process, кажется. Можно и без билдера
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38481591
Oksana Palun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Blazkowicz]Oksana PalunВот статья по теме. Актуальна, до Java 7. В Java 7 проблема та же, но решение проще.
http://www.javaworld.com/jw-12-2000/jw-1229-traps.html
ага, читала эту статью вчера, но чето решила, что это мне не поможет, а ларчик то просто открывался...:)
Вроде как заработало, спасибо, добрые мОлодцы :)
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38483771
e-rover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если открываете файл через cmd и при вычитывании потоков создаете InputStreamReader, не забудьте указать кодировку консоли.
Код: java
1.
InputStreamReader isr = new InputStreamReader(is, "CP866");


А вот сообщения об ошибках WinApi CreateProcess приходят в кодировке cp1252:

java.io.IOException: Cannot run program "НеСуществует.exe": CreateProcess error=2, Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë
(SQL.ru исправил, но реально «Не удается найти указанный файл» будет кракозяблами)

При чем в e.getMessage() имя файла может содержать русские буквы в правильной кодировке, а «Не удается найти указанный файл» быть в cp1252.
Код: java
1.
2.
3.
4.
5.
java.io.IOException: Cannot run program "НеСуществует.exe": CreateProcess error=2, Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
	... 
Caused by: java.io.IOException: CreateProcess error=2, Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë
	at java.lang.ProcessImpl.create(Native Method)


Как видно из стека, «Cannot run program "НеСуществует.exe"» добавляет ProcessBuilder, поэтому и кодировка правильная. А «CreateProcess error=2, Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë» приходит из java.lang.ProcessImpl.create(Native Method). Видимо, там cp1252 (ISO-8859-1) прибит гвоздями.
Если кто знает, как это полечить, напишите.
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38483790
e-rover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL.ru исправил
К сожалению, в предварительном просмотре символы выглядели иначе. Попробую еще раз запостить стек как он есть: в двух кодировках одновременно

java.io.IOException: Cannot run program "НеСуществует.exe": CreateProcess error=2, Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë
at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
...
Caused by: java.io.IOException: CreateProcess error=2, Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë
at java.lang.ProcessImpl.create(Native Method)
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38483809
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
e-rover,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
>chcp
Active code page: 866

>chcp /?
Displays or sets the active code page number.

CHCP [nnn]

  nnn   Specifies a code page number.

Type CHCP without a parameter to display the active code page number.

>chcp 1251
Active code page: 1251
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38483855
e-rover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

CreateProcess – это функция WinApi, к командному процессору отношения не имеет.
Т.е. если Вы через Runtime.getRuntime().exec() запускаете "НеСуществует.exe", тест сообщения об ошибке будет в cp1252, а название файла в 1251. И это все в одной строке:
java.io.IOException: Cannot run program "НеСуществует.exe": CreateProcess error=2, Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38483872
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
e-rover, я провёл эксперимент. Создал дочернее окно CMD. Кодовая страница наследуется.
Тоесть вам можно установить ее значение в процессе-родителе.

Что у вас процесс-родитель я не знаю. Возможно это Java окружение для среды разработки.
Там и конфигурируйте кодовую страницу.
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38483911
e-rover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый mayton, мой вопрос ни коем образом не касается CMD.EXE!
Я запускаю программу "НеСуществует.exe". Для этого вызываю:
Runtime.getRuntime().exec("НеСуществует.exe");

Ознакомьтесь с http://www.javaworld.com/jw-12-2000/jw-1229-traps.html
Runtime.getRuntime().exec() - это не командная строка. Она выполняет запуск НЕ через CMD.

Для запуска exe-шника jvm обращается к WinApi, вызывает функцию CreateProcess, просит ее запустить "НеСуществует.exe" и получает код ошибки 2 («Не удается найти указанный файл»). Jvm генерит IOException с сообщением «CreateProcess error=2, Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë», где виндовый текст ошибки представлен в cp1252.
Что совершенно неожиданно, т. к. java-процесс я запускаю с кодировкой cp1251.
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38483945
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
e-rover, а чему у тебя равны переменные user.language, user.country ?
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38483969
e-rover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

user.language = ru
user.country = RU
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38483972
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и .... ? В голове не звенит колокольчик? Что надо что-то изменить.
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38483982
e-rover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Хотя сейчас и 7 часов пятницы, в голове не звенит.
У Вас есть объяснение, почему сообщение идет в западноевропейской кодировке?
...
Рейтинг: 0 / 0
Как дождаться заверщения процесса
    #38483996
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
e-rover, вот в топике тебе достаточно инфы чтобы решать проблему запуска процесс бильдера.
Плевать вообще на текст ошибки! Там херячит локализованя стринговая константа. Хочешь
ее увидеть в оригинале (английский) - стань англичанином для java.

Проблемы кракозябр твоей консоли - это проблемы твоей консоли! Java всё честно отдаёт в Unicode!

Усёк?

Ну всё тогда давай. Не кашляй.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как дождаться заверщения процесса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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