2012-10-28 45 views
0

我試圖跟蹤我的JPanel打開的時間,以毫秒爲單位,我不知道是否有更簡單的方法來做到這一點,但我想我會記錄當前在windowOpened()中的MS中的時間,然後從面板關閉的時間中減去它?不幸的是,我不知道如何傳遞這個變量。跟蹤在Java中打開一個窗口的時間長度

這裏是我的代碼:

public void windowOpened(WindowEvent arg0) { 
    Calendar OlCDateTime = Calendar.getInstance(); 
    long openedTime = OlCDateTime.getTimeInMillis(); 
    System.out.println(openedTime); 
} 

我想,我使用的方法外部訪問一個局部變量,但我不知道如何解決這個問題。任何意見,如何做到這一點或更好的方式做我想做什麼,將不勝感激。

+2

1)爲什麼? 2)你有問題嗎? 3)請學習常見的[Java命名約定](http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307)(具體用於名稱的情況) ,方法和屬性名稱並一致使用。 –

+0

我的確提出了這個問題:我如何在windowOpened之外傳遞變量,或者有更好的方法來跟蹤窗口打開多久?不知道爲什麼我必須告訴你/爲什麼/我想跟蹤窗口打開多久才能得到答案。 – allocate

+1

是否有理由不能簡單地將時間作爲實例變量保存在類中? – jheddings

回答

1

你應該能夠在你的類中使用一個實例變量來實現這一點。只需跟蹤窗戶何時打開和何時關閉;然後提供一種方法來訪問您需要的信息。它可能看起來像這樣(簡體版):

public class MyPanel extends JPanel { 
    // ... 

    private long _openTime = 0; 
    private long _closeTime = 0; 

    public long getOpenTime() { 
     long closed = _closeTime; 

     // if the window is still open, use current time... 
     if (closed == 0) { 
      closed = System.currentTimeMillis(); 
     } 

     return (closed - _openTime); 
    } 

    public void onWindowOpened(WindowEvent evt) { 
     _openTime = System.currentTimeMillis(); 
    } 

    public void onWindowClosed(WindowEvent evt) { 
     _closeTime = System.currentTimeMillis(); 
     System.out.println(getOpenedTime()); // DEBUG 
    } 
} 

這使得「打開時,」只要對象仍然有效進行訪問。這將包括任何訂閱此對象上的事件的調用者。