【发布时间】:2017-07-29 21:00:00
【问题描述】:
我正在尝试创建一个终端模拟器。 我的代码是
ProcessBuilder builder = new ProcessBuilder("/system/bin/sh");
builder.redirectErrorStream(true);
builder.directory(f);
p = builder.start();
stdOut = p.getInputStream();
stdIn = p.getOutputStream();
stdIn.write(("ls\n").getBytes());
stdIn.write(("echo EOF\n").getBytes());
while(true) {
int n;
try {
n = stdOut.read();
} catch (Exception | Error e) {
return;
}
if(n == -1) continue;
char c = (char) n;
if(c == '\n') {
if(line.equals("EOF")) break;
else {
if(write) outputable.onOutput(line);
outputMsg[0] = outputMsg[0] + "\n" + line;
line = "";
}
} else {
line = line + c;
}
}
此代码适用于 Android 6.0、5.0、4.0、3.0... 它不适用于牛轧糖 (7.0)。 没有错误,没有例外,什么都没有。它只是挂在这一行:
n = stdOut.read();
InputStream.read() 只有在流中没有可用内容时才应该挂起。 有人知道解决方案吗?
【问题讨论】:
标签: java android shell runtime