Java поток не работает до конца, почему? - PullRequest
0 голосов
/ 17 февраля 2011

У меня есть Runnable, который передает данные (несколько сотен файлов) с устройства Android на ПК, выполняя в методе запуска следующее

  1. Создает процесс и выполняет команду, используя Runtime.exec (CMD)
  2. CMD - это команда, которая передает данные с устройства на ПК, на котором запущен этот поток. (Это команда adb pull для android)

У меня есть основная программа, которая создает поток и запускает этот исполняемый файл. Запускается runnable, и он выполняет команду «adb pull» и начинает передачу данных, НО, кажется, он делает паузу вскоре после того, как завершит полную передачу. Если я принудительно покину основную программу, передача завершится.

Также, если бы я выполнил команду из самой основной программы без использования другого потока, у меня не возникло проблем.

Почему я сталкиваюсь с этой проблемой?

1 Ответ

4 голосов
/ 17 февраля 2011

Вам необходимо использовать вывод команды.

Этот вопрос показывает, как использовать выходные данные в сценариях оболочки, а не в коде: Java ProcessBuilder: Зависание результирующего процесса .

Если вы хотите использовать вывод в своем Java-коде, в основном вы будете читать из InputStream, предоставляемого Process.InputStream.

   Process process = Runtime.exec(CMD);
   InputStream in = process.getInputStream();
   // Repeatedly read from the input stream until eof.

Блокируется до завершения другого процесса. Если вам нужен параллелизм, вы можете прочитать вывод в другом потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...