Java线程没有运行完成,为什么?

时间:2011-02-16 23:14:43

标签: java android multithreading process adb

我有一个Runnable,它通过在运行方法中执行以下操作,将数据(几百个文件)从Android设备传输到PC

  1. 使用Runtime.exec(CMD)
  2. 创建进程并执行命令
  3. CMD是一个命令,用于将数据从设备传输到运行此线程的PC。 (这是Android的adb pull命令)
  4. 我有一个主程序,可以创建一个Thread并启动这个runnable。 runnable开始运行并执行“adb pull”命令并开始传输数据,但它似乎在完成完全传输之后很快就会暂停。如果我强行退出主程序,转移将完成。

    我也没有使用其他线程从主程序本身执行命令,我没有遇到任何问题。

    为什么我要面对这个问题?

1 个答案:

答案 0 :(得分:4)

您需要使用命令的输出。

此问题显示如何使用shell脚本而不是代码来使用输出:Java ProcessBuilder: Resultant Process Hangs

如果要在Java代码中使用输出,基本上您将从Process.InputStream提供的InputStream中读取。

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

这将阻止,直到其他进程完成。如果你想要并发,你可以在另一个线程中读取输出。