2017-06-11 32 views
1

这是我的一些示例代码:如何停止console.readLine()?

public class test implements Runnable { 
@Override 
public void run() { 

    Console console = System.console(); 
    if (console == null) { 
     System.exit(0); 
    } 
    String s = console.readLine(); 
    System.out.println(s); 
    run(); 
} 
} 

我的目标是在几秒钟后停止到Console.ReadLine()。

回答

1

你可以在你想要运行几秒钟的代码周围设置一个计时器。像这样:

new java.util.Timer().schedule( 
    new java.util.TimerTask() { 
     @Override 
     public void run() { 
      // your code here 
     } 
    }, 
    5000 
); 
+0

这适用于我希望它工作的内容。尽管Mike Nakis的回答也很好。 – conku

0

以下是无阻塞的标准输入读卡器,让你永远不必担心这样的事情了:

public final class NonblockingStandardInputReaderThread 
{ 
    private NonblockingStandardInputReaderThread() 
    { 
    } 

    public static void start(Consumer<String> lineConsumer) 
    { 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader( 
      System.in)); 
     Thread backgroundReaderThread = new Thread(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       while(!Thread.interrupted()) 
       { 
        try 
        { 
         String line = bufferedReader.readLine(); 
         if(line == null) 
          break; 
         lineConsumer.invoke(line); 
        } 
        catch(IOException e) 
        { 
         System.out.println(getClass().getName() + ": " + e); 
        } 
       } 
      } 
     }, NonblockingStandardInputReaderThread.class.getName()); 
     backgroundReaderThread.setDaemon(true); 
     backgroundReaderThread.start(); 
    } 
} 

因此,例如本:

NonblockingStandardInputReaderThread.start(s -> System.out.println(s) ); 

您可以通过标准输入提交的每一行文本都在标准输出中回显而没有任何阻塞。