2015-06-25 49 views
1

我正在運行一些commnads上的命令提示符。我正在等待最後的命令輸出完成。我必須讀取輸出並執行操作。我的命令輸出非常動態,我無法預測何時可以停止閱讀。從stdin讀取,但無法知道何時停止

我有問題,我不知道什麼時候停止閱讀。如果假設我保留了read(),那麼我的最後一個命令輸出不會以新行結束。有什麼mechenism可以告訴我,如果最後5分鐘沒有任何stdin的活動,那麼我得到一些警報?

+1

您可以創建一個線程計時器,該計時器向下計數5分鐘,並執行System.exit(),除非調用read()重置計時器。 –

回答

0

我採取的方法是創建一個實現Runnable的類,該類監視共享的AtomicInteger標誌的值。這個InputRunnable類睡眠5分鐘(300000毫秒),然後醒來檢查值是否已由主方法設置。如果用戶在最近5分鐘內輸入了至少一個輸入,則該標誌將被設置爲1,並且InputRunnable將繼續執行。如果用戶有而不是在最近5分鐘內輸入了一個輸入,那麼該線程將調用System.exit(),這將終止整個應用程序。

public class InputRunnable implements Runnable { 
    private AtomicInteger count; 

    public InputRunnable(AtomicInteger count) { 
     this.count = count; 
    } 

    public void run() { 
     do { 
      try { 
       Thread.sleep(300000);    // sleep for 5 minutes 
      } catch (InterruptedException e) { 
       // log error 
      } 

      if (count.decrementAndGet() < 0) {  // check if user input occurred 
       System.exit(0);      // if not kill application 
      } 
     } while(true); 
    } 
} 

public class MainThreadClass { 
    public static void main(String args[]) { 
     AtomicInteger count = new AtomicInteger(0); 
     InputRunnable inputRunnable = new InputRunnable(count); 
     Thread t = new Thread(inputRunnable); 
     t.start(); 

     while (true) { 
      System.out.println("Enter a number:"); 
      Scanner in = new Scanner(System.in); 
      int num = in.nextInt();     // scan for user input 

      count.set(1); 
     } 
    } 
} 

我在本地測試此代碼,它似乎是工作,但請讓我知道如果你獲得到您的系統上運行的任何問題。

+0

@AnimeshJain請檢閱我的答案,並讓我知道它是否解決了您的問題。 –