2017-06-11 59 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) ); 

您可以通過標準輸入提交的每一行文本都在標準輸出中回顯而沒有任何阻塞。