Проблема: я не могу выйти из бесконечного цикла/блока из буферизованного reader.readline(). Он проходит его один раз, а затем просто зависает после второго выхода из цикла while.
Вот мой код:
public void sendCommand(String command){
{
String line;
try{
while((line = consoleOutput.readLine())!= null)
{
System.out.println(line);
if(line.equals("rkscli:") || line.equals("password :") || line.equals("Please login: ")){
pin.write((command + "\n\r").getBytes());
}
}
}
Я использую метод, используемый nilbot из: здесь я делаю именно это, когда пытаюсь отправить команды через оболочку.
Проблема:
То, что я пытаюсь сделать, это заставить программу ждать, пока сервер не будет готов к приему дополнительных команд (дождитесь приглашения rkscli, потому что некоторые команды занимают больше времени). Что я могу сделать для этого? В настоящее время я использую метод pipeinput/output.
Другая информация:
Сервер даст мне (пустые строки с новой строкой) перед подсказкой. После нескольких из них он даст мне подсказку. Я также заметил, что если бы я изменил код, чтобы он выглядел так:
public void sendCommand(String command){
{
String line;
try{
while((line = consoleOutput.readLine())!= null)
{
System.out.println(line);
pin.write("\r\n".getBytes());//Added line
if(line.equals("rkscli:") || line.equals("password :") || line.equals("Please login: ")){
pin.write((command + "\n\r").getBytes());
}
}
}
Он не будет зависать в bufferedReader.readline(), но будет проходить и пропускать запись (похоже, он ничего не записывает в оболочку, а иногда это будет и непредсказуемо)
Любые идеи относительно того, что я могу сделать?