0
5秒以内にテキストを入力しないとTimeoutExceptionが発生しません。以下のコードメソッドはgetMsg()を呼び出し、テキスト入力を待ちます。私は 'timeout(5、TimeUnit.SECONDS)'を入力して5秒間だけ待つようにしました。ユーザーが5秒以内にmsgと入力しなかった場合のタイムアウトエラーを表示したい。rxJavaタイムアウトユーティリティを使用するとTimeoutExceptionが発生しない
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.concurrent.TimeUnit;
import rx.Observable;
public class TestRx {
public static void main(String[] args) throws IOException {
Observable.just(getMsg())
.timeout(5, TimeUnit.SECONDS)
.subscribe(System.out::println,
e -> e.printStackTrace());
System.out.println("End...");
}
private static String getMsg() throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter a msg:");
String msg = reader.readLine();
return msg;
}
}
感謝を:代替は、データまたは終了を待つこと
subscribeOn
、可能なblockingSubscribe
を使用することです。私はちょうど()静的な値で動作すると思うか、それは単に()メソッドを呼び出す前に評価する必要があります文です。 –タイムアウト例外が発生した場合にプログラムを終了しますが、現在のタイムアウト例外が発生しても実行中です。プログラムの実行を終了する方法を提案してください。 –
RxJavaの範囲外のJavaのメインスレッドでブロッキングが発生するため、バックグラウンドスレッドでgetMsg()を実行する必要があります。それに応じて答えを更新しました。 – akarnokd