2014-01-29 55 views
0

我的問題:事件偵聽器Java之間的等待

我有連接到一個JLabel和可變兩個事件偵聽器

boolean A = false; 
public void mouseEntered(MouseEvent evt) { ... } 
public void mouseExited(MouseEvent evt) { ... } 

我想要做的是:當是的mouseExited在X毫秒內觸發等待,以便捕獲A變量中由於某些代碼進入mouseEntered事件偵聽器的某些更改(如果發生)。

我已經嘗試過使用Timer,但不起作用 - >在等待期間,我無法捕捉到變量A的新值。我只能在計時器結束後才能看到它。

任何想法來實現這個?

+0

聽起來更像你需要提供一些關於「A」實際發生變化的通知,然後試圖等待其他東西 – MadProgrammer

回答

0

我想這一點,事件的

label.addMouseListener(new MouseAdapter() { 
    java.util.Timer t; 

    @Override 
    public void mouseEntered(MouseEvent evt) { 
     // Test Condition 
     if(condition) { 
      // do something 
     } else { 
      t.cancel(); 
      t.purge(); 
     } 
    } 

    @Override 
    public void mouseExited(MouseEvent e) { 
     t = new java.util.Timer(); 
     t.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       // do something 
       t.cancel(); 
       t.purge(); 
      } 
     }, 1*1000); 
    } 

步驟:

1)的mouseExited被觸發 - >等待1秒
2)在此期間,如果的mouseEntered被觸發(條件不驗證mouseEntered)它應該結束計劃的任務,但它會在線程「AWT-EventQueue-0」中拋出一個異常java.lang.NullPointerException

如果在這段時間內觸發mouseEntered,如何終止此計劃任務?