Ограничение по времени для входа - PullRequest
7 голосов
/ 02 мая 2011

Предположим, у меня есть код, где он просит пользователя дать какой-то ввод, что-то вроде этого:

for (condition) {
System.out.println("Please give some input");
System.in.read();
} //lets say this loop repeats 3 times and i face a problem during second iteration

но я хочу дать пользователю 60-секундный лимит времени, а затем выдать исключение (в данном случае, я думаю, это TimeOutException). Как мне это сделать?

Ответы [ 3 ]

3 голосов
/ 02 мая 2011
import java.util.Timer;
import java.util.TimerTask;
import java.io.*;
public class test
{
    private String str = "";

    TimerTask task = new TimerTask()
    {
        public void run()
        {
            if( str.equals("") )
            {
                System.out.println( "you input nothing. exit..." );
                System.exit( 0 );
            }
        }    
    };

    public void getInput() throws Exception
    {
        Timer timer = new Timer();
        timer.schedule( task, 10*1000 );

        System.out.println( "Input a string within 10 seconds: " );
        BufferedReader in = new BufferedReader(
        new InputStreamReader( System.in ) );
        str = in.readLine();

        timer.cancel();
        System.out.println( "you have entered: "+ str ); 
    }

    public static void main( String[] args )
    {
        try
        {
            (new test()).getInput();
        }
        catch( Exception e )
        {
            System.out.println( e );
        }
        System.out.println( "main exit..." );
    }
}
2 голосов
/ 02 мая 2011

Я использую joda-time для такого рода вещей:

Maven:

  <!--  Joda Time -->
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>1.6.2</version>
    </dependency>

При запросе на ввод установите переменную LocalDateTime:

 LocalDateTime timeOut = new LocalDateTime().plusSeconds(15);

И цикл до тех пор, пока пользователь не введет или не достигнет тайм-аута:

 if (timeOut.isBefore(new LocalDateTime())) {
 //throw your exception if this case happens
 }

Перед тем, как получить отрицательное голосование: это просто быстрое занятие: p

ура

0 голосов
/ 22 сентября 2016

Как насчет чего-то такого простого:

    Scanner reader = new Scanner(System.in); 
    System.out.println("Enter a number: ");
    long limit = 5000L;
    long startTime = System.currentTimeMillis();
    Long l = reader.nextLong();
    if ((startTime + limit) < System.currentTimeMillis())
        System.out.println("Sorry, your answer is too late");
    else
        System.out.println("Your answer is on time");

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...