当两种方法 运行 无限期地执行时,您如何连续执行其中一种方法,而另一种方法基于按键事件?

How do you execute one of two methods continuously when they run indefinitely and one based off a keypress event?

我正在开发一个依赖于用户按键和基于时间的事件的应用程序。这些方法将 运行 在两种情况下:

1: 如果用户按下某个键,应用程序将打印 foo.

2: 如果经过 3 秒,则应用程序打印 bar。

第一个场景 运行 独立于第二个场景,但第二个场景依赖于第一个场景。每次调用 keypress event 时,3 秒计时器都应重置。在执行这两个方法之一后,应用程序应该 return 进入应用程序等待这两个事件之一再次发生的状态。

代码可能类似于以下内容

@override
public void onPress(int i){
    System.out.print("foo");
}

public void printBar(){
    if(timeElapsed > 3){
        System.out.print("bar");
    }
}

所以当按键被按下时,on press 事件应该正常发生,但是 printBar 应该只在最近执行最近的 keyPress 后 运行 3 秒。每次执行按键都应重置 printBar 计时器。感谢您的帮助,如果我能提供更好的信息,请告诉我。

让我大致介绍一下如何执行此操作。

我假设您的按键方法工作正常(按下按键时总是打印 foo)。你现在需要解决的,是如何重置定时器。

不知道你用的是什么定时器。但我猜是因为该应用程序与按键事件有关,并且可能您正在使用 swing。我建议您使用 java.swing.Timer.

使用摆动计时器可以很容易地知道已经过了多少时间。

final Timer t = new Timer (3000, new ActionListener() {
    public void actionPerformed (ActionEvent e) {
        System.out.println("bar");
    }
});

这个很简单。 3000 表示 3000 毫秒或 3 秒。当 s 秒过去时,actionPerformed 被执行。在actionPerformed中,您可以只调用您的printBar(不检查!)或者您可以调用System.out.println来满足要求。

现在我们已经设置好了,我们要如何重置它?

幸运的是,Timer class 提供了一个非常有用的方法,称为 restart。在您的 onPress 方法中,只需调用此方法

@Override
public void onPress () {
    System.out.println("foo");
    t.restart();
}

砰!你做到了!