![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
fclmfan |
|
|||
Werdum face ![]() Профиль Группа: Awaiting Authorisation Сообщений: 64 Регистрация: 21.10.2008 Репутация: нет Всего: нет |
Здравствуйте! Архивирую файл с помощью ARJ из Java...
Вот сам ARJ.EXE Если архивирую совсем маленькие файлы, то работает нормально, а если допустим 1Мб, то программа "зависает" на p.waitFor(), хотя сам файл благополучно архивируется. Если не использую waitFor(), то работает без проблем. Но мне надо именно дождаться, когда будет готов архив... Подскажите, как исправить или обойти проблему? P.S. сам ARJ работает исправно, если запускать вручную. |
|||
|
||||
Skynin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 6 Всего: 10 |
Она то и делает - дожидается когда будет закончена работа. "Дожидается" и "зависла" в отношении потока выполнения программы - считайте одно и тоже. Process . waitFor() causes the current thread to wait, if necessary, until the process represented by this Process object has terminated. Определитесь: вам чтобы ждала или не ждала? Это сообщение отредактировал(а) Skynin - 9.10.2011, 15:11 |
|||
|
||||
fclmfan |
|
|||
Werdum face ![]() Профиль Группа: Awaiting Authorisation Сообщений: 64 Регистрация: 21.10.2008 Репутация: нет Всего: нет |
В моём случае она уже не "дожидается", а просто "зависает" на файлах бОльшего размера. Я пробовал ждать и по несколько минут, она не отлипается сама собой. Хотя если архивировать не через джаву, а просто через консоль, на 1Мбайтный файл уходит пару секунд максимум. Так что повторюсь, программа не "дожидается", а "зависает". При чём, как я уже сказал, сам архив "a.arj" появляется не диске физичеки, но программа не завершает работу. |
|||
|
||||
Skynin |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 6 Всего: 10 |
То есть проблема на уровне взаимодействия JVM и ОСи, или ОСи и arj.exe - о завершении внешнего процесса, в каких-то ситуациях (файлы больше ...) не сообщается в точку waitFor() Программа все ждет и ждет. Можно посоветовать либо почитать и сделать как в ссылка 1 ссылка 2 в надежде что есть какой-то тонкий нюанс, - "нельзя запускать без перехвата ввода-вывода и/или из потока main" или заменить: версию JVM, версию ОСи, версию arj.exe
Когда я обнаруживаю место затыка в программе - у меня слово "зависает" исчезает. Зависание - это когда не знаешь по какой причине программа застопорилась - ждет и ждет ввода (получения управления) или в бесконечный цикл вошла. |
||||
|
|||||
dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
arj пытается писать в out и err, поэтому тебе надо их читать.
Читать их надо в отдельном Thread, после того как процесс стартовал.
Если читать не будешь, то arj будет пытаться писать в стрим из которого не читают. По заполнению стрима, arj будет ждать когда операция вывода в консоль завершиться. Думаю, что архивация мелких файлов не вызывает переполнения буффера, а архивация больших - вызывает. Это сообщение отредактировал(а) dobrolub - 10.10.2011, 05:52 |
|||
|
||||
fclmfan |
|
|||
Werdum face ![]() Профиль Группа: Awaiting Authorisation Сообщений: 64 Регистрация: 21.10.2008 Репутация: нет Всего: нет |
dobrolub, спасибо! Ваш способ помог! И Skynin, тоже спасибо за помощь.
|
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Можно запускать через .bat файл
и вывод попадёт в файл и его можно не читать или прочитать позже. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |