7

Вопрос по java – установить тайм-аут для ввода пользователя

Можно ли установить таймер для пользовательского ввода? Подождите 10 секунд - выполните следующую операцию и т. Д. Я имею ввиду например

 //wait several seconds{
 String s = new BufferedReader(new InputStreamReader(System.in)).readLine();
 //wait server seconds}
 //next operation and etc.
  • Error: User Rate Limit ExceededSystem.inError: User Rate Limit ExceededBufferedReader::readLine.

    от
  • Error: User Rate Limit ExceededSystem.inError: User Rate Limit Exceeded

    от
  • Error: User Rate Limit ExceededThread.sleep(100)Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • 13

    Немного более простой способ сделать это

    чем ответ Бенджамина Кокса, состоит в том, чтобы сделать что-то вроде

    int x = 2; // wait 2 seconds at most
    
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    long startTime = System.currentTimeMillis();
    while ((System.currentTimeMillis() - startTime) < x * 1000
            && !in.ready()) {
    }
    
    if (in.ready()) {
        System.out.println("You entered: " + in.readLine());
    } else {
        System.out.println("You did not enter data");
    }
    

    Это, однако, потребляет больше ресурсов, чем его решение.

  • 5

    Не прямо из коробки

    нет. Обычно Reader прекращает вызов read () только тогда, когда другой поток закрывает основной поток, или вы достигли конца ввода.

    Поскольку read () не так уж и прерываем, это становится проблемой параллельного программирования. Поток, который знает об истечении времени ожидания, должен иметь возможность прерывать поток, который пытается прочитать ввод.

    По сути, поток чтения должен будет опрашивать метод Reader's ready (), а не блокироваться в read (), когда нечего читать. Если вы поместите эту операцию опроса и ожидания в java.util.concurrent.Future, то вы вызовете метод get () будущего с тайм-аутом.

    Эта статья детализируется:http://www.javaspecialists.eu/archive/Issue153.html