2013-05-15 67 views
0

除非另有新的預定任務覆蓋,否則在x秒後如何執行任務?覆蓋預定任務

這種情況是我想在用戶輸入完我的JTextField後1秒鐘執行任務。爲此,我需要安排任務,並在每次「文檔」更改時重新安排時間。

我嘗試使用ScheduledExecutorService,但調度只是將任務添加到列表中,而不是取消上一個任務。

這裏就是我想它去:

class TextChangeListener implements DocumentListener { 
    private final ??? updater = new ???(); 

    @Override 
    public void changedUpdate(DocumentEvent arg0) {} 

    @Override 
    public void insertUpdate(DocumentEvent arg0) { 
     update(); 
    } 

    @Override 
    public void removeUpdate(DocumentEvent arg0) { 
     update(); 
    } 

    private void update() { 
     // Wait for the user to finish typing first 
     updater.schedule(new Runnable() { 
      @Override 
      public void run() { 
       doSomeStuff(); 
      } 
     }, 1, TimeUnit.SECONDS); 
    } 
} 

回答

3

我覺得你的軌道上與你的ScheduledExecutorService的 - 你只需要抓住它返回Future。檢查出cancel方法。我假設你正在使用schedule方法。

所以基本上你想要做這樣的事情

if (future != null) { 
    future.cancel(); 
} 
future = // do scheduling code with ScheduledExecutorService 
+0

完美!謝謝。 – CJxD