Если он висит на readLine()
, это означает, что либо ваше "while" никогда не заканчивается (может быть маловероятно, учитывая ваш код), либо readLine()
ожидает своего источника, а именно IOstream
блокирует поток, вызывающий available()!=true
.
Я не могу устранить неполадки в вашем коде, не увидев отладочную информацию. Но в качестве совета вы пробовали PipedIntputStream
? Идея состоит в том, чтобы направить ваш консольный ввод в «ваш» вывод, чтобы вы могли «записать» его. Для этого вам нужно инициализировать вход / выход.
InputStream in = new PipedInputStream();
PipedOutputStream pin = new PipedOutputStream((PipedInputStream) in);
/**...*/
channel.setInputStream(in);
channel.connect();
/** ...*/
pin.write(myScript.getBytes());
То же самое касается вашего вопроса, как читать вывод консоли.
PipedInputStream pout = new PipedInputStream((PipedOutputStream) out);
/**
* ...
*/
BufferedReader consoleOutput = new BufferedReader(new InputStreamReader(pout));
consoleOutput.readLine();
И снова, если вы не уверены, сколько строк читать и, следовательно, хотите использовать "while", убедитесь, что вы что-то делаете внутри, чтобы предотвратить 1) ожидание занятости 2) условие завершения. Пример:
while(!end)
{
consoleOutput.mark(32);
if (consoleOutput.read()==0x03) end = true;//End of Text
else
{
consoleOutput.reset();
consoleOutput.readLine();
end = false;
}
}