我在我的android模拟器上运行tcpdump,因为tcpdump在后台运行,缓冲区中没有任何数据,因此应用程序暂时停留。 这是代码的一部分:
else if (tcpdumpButton.isChecked())
{
try
{
Process process1 = Runtime.getRuntime().exec("tcpdump");
DataOutputStream os = new DataOutputStream(process1.getOutputStream());
BufferedReader osRes = new BufferedReader(new InputStreamReader(process1.getInputStream()));
//ByteArrayInputStream osRes = (ByteArrayInputStream) process1.getInputStream();
// os.writeBytes("tcpdump -l port 80");
os.flush();
StringBuffer output = new StringBuffer();
try
{
while ((osRes.readLine()) != null)
{
output.append(osRes.readLine());
output.append("\n");
}
}
catch (Exception e)
{
throw e;
}
process1.waitFor();
tv.setText(output);
setContentView(tv);
}
catch (Exception e)
{
throw e;
}
任何帮助?
答案 0 :(得分:1)
您的代码逻辑不好,因为“ BufferedInputStream.readLine()”是一种阻止方法。
因此,在您的代码中,您永远不会退出while循环。 所以,你永远不会到达“tv.setText(output);”
这一行从流程中读取一行后,如果您不想关闭流或关闭流程,则应打印缓冲区(并清除它),在while循环内 。