0

我正在尝试跟踪我的 JPanel 打开的时间(以毫秒为单位),我不知道是否有更简单的方法可以做到这一点,但我想我会在 windowOpened() 上记录 MS 中的当前时间,然后减去它从面板关闭时开始?不幸的是,我不知道如何传递这个变量。

这是我的代码:

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

我想我正在使用在方法之外无法访问的局部变量,但我不知道如何解决这个问题。任何关于如何做到这一点或更好的方式来做我想做的事情的建议将不胜感激。

4

1 回答 1

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
    }
}

只要对象保持有效,就可以访问“打开时间”。这将包括已订阅此对象上的事件的任何调用者。

于 2012-10-28T04:08:59.480 回答