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
을 사용하는 것입니다. 난 just() 정적 값 또는 그냥 호출하는 전에 평가해야하는 문을 작동합니다() 메서드를 생각합니다. –시간 초과 예외가 발생해도 프로그램이 종료되기를 원하지만 현재 시간 초과 오류가 발생해도 여전히 실행 중입니다. 실행중인 프로그램을 종료하는 방법을 제안하십시오. –
블로킹은 RxJava의 범위를 벗어난 Java 주 스레드에서 발생하기 때문에 백그라운드 스레드에서 getMsg()를 실행해야합니다. 이에 따라 답변이 업데이트되었습니다. – akarnokd