eclipse 输入的时间限制

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5853989/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 16:16:02  来源:igfitidea点击:

Time limit for an input

javaeclipse

提问by hari

Suppose I have a code where it asks the user to give some input, something like this:

假设我有一个代码,它要求用户提供一些输入,如下所示:

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

but I want to give the user a 60 second time limit, and then throw an exception (in this case, I think its TimeOutException). How do I do that?

但我想给用户 60 秒的时间限制,然后抛出异常(在这种情况下,我认为是TimeOutException)。我怎么做?

采纳答案by Nirmal- thInk beYond

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..." );
    }
}

回答by chzbrgla

I use joda-time for this kind of stuff:

我将 joda-time 用于此类内容:

maven:

行家:

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

When prompting to input, set a LocalDateTime variable:

当提示输入时,设置一个 LocalDateTime 变量:

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

And loop until user either inputs or the timeout is reached:

并循环直到用户输入或达到超时:

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

Before getting a down-vote: this is just a quickie :p

在获得否决票之前:这只是一个快速:p

cheers

干杯

回答by Felix

How about something as simple as this:

像这样简单的事情怎么样:

    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");

This will not throw an exception, only inform the user about being too late with his answer. (related to another question that was referred to this post).

这不会抛出异常,只会通知用户他的答案为时已晚。(与此帖子中提到的另一个问题有关)。