1

我有一个名为reminderList.

当鼠标单击列表中的某个项目并且鼠标退出列表时,我想要一个计时器启动。

当鼠标进入列表时,如果它仍在运行,我希望该计时器停止。

当鼠标再次退出列表时,我希望重新启动相同的计时器。

public void waitReminderList(int status) {
    Timer timer = new Timer(10000, new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            reminderList.clearSelection();
            dismissReminder.setEnabled(false);
        }
    });
    if (status == 0) {
        if (!reminderList.isSelectionEmpty()) {
            timer.setRepeats(false);
            timer.restart();
            timer.start();
        }
    } else if (status == 1) {
        if (!reminderList.isSelectionEmpty()) {
            timer.stop();
        }
    }

private void reminderListMouseExited(java.awt.event.MouseEvent evt) {                                         
    waitReminderList(0);
} 

private void reminderListMouseEntered(java.awt.event.MouseEvent evt) {                                          
    waitReminderList(1);
}

问题是:计时器在启动后不会停止或重新启动或做任何事情,但我需要它。

我对这个问题的解决方案是有一个 int,然后我可以通过 int 的值来控制我希望计时器做什么。但它没有用,计时器没有停止......

那我做错了什么?

我知道还有其他类似的问题,但是我对 java 还是很陌生,我不明白给出的答案。

谢谢

4

2 回答 2

2

问题是你Timer每次都在创建一个新waitReminderList的被调用。任何先前运行的Timer对象都不会停止。由于您想要Timer将引用移到方法之外,例如在类级别。

于 2013-04-13T20:03:45.367 回答
1

不要在你的 waitReminderList() 方法中继续创建一个新的 Timer。您应该将 Timer 定义为类变量。

然后您只需根据需要停止/启动它。

于 2013-04-13T20:02:55.103 回答