問題:バッファリングされたreader.readline()から「無限ループ/ブロック」から抜け出せないようです。1回通過し、whileループから2番目のループが発生した後、そこにハングアップします。
これが私のコードです:
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());
}
}
}
ここでは 、シェル経由でコマンドを送信しようとしているところで、まさにこれを行っています。
問題:
私が達成しようとしているのは、サーバーがさらにコマンドを受け取る準備ができるまでプログラムを待機させることです (一部のコマンドにはさらに時間がかかるため、プロンプト「rkscli」を待ちます)。これを達成するにはどうすればよいですか? 現在、pipedinput/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() でハングすることはありませんが、書き込みはスキップされます (シェルには何も書き込まれていないようで、予測できない場合もあります)。
私に何ができるかについてのアイデアはありますか?