Java 自函数上次调用以来经过的时间

Java 自函数上次调用以来经过的时间,java,Java,我正在尝试编写一个方法,该方法将返回自上次调用该方法以来经过的时间量,如下所示: package JGame.Util; import java.util.Date; public class Util{ protected static Long lastTime = null; public static long getLastTime(){ long time = new Date().getTime(); if(Util.last

我正在尝试编写一个方法,该方法将返回自上次调用该方法以来经过的时间量,如下所示:

package JGame.Util;

import java.util.Date;

public class Util{

    protected static Long lastTime = null;

    public static long getLastTime(){
        long time = new Date().getTime();
        if(Util.lastTime == null){
            Util.lastTime = time;
            return 0;
        }
        long ftime = time - Util.lastTime;
        Util.lastTime = time;
        return ftime;
    }
}
然后,我在一个按键事件中调用如下方法:

long lastTime = Util.getLastTime();
if(lastTime > 1000){
    return;
}
System.out.println(lastTime);
我遇到的问题是,当按下该键时,它会打印出上次的
,但它应该每秒只打印一次

以下是输出:

122
6
7
13
9
7
10
9
10

在按住键的同时,我希望所有的时间间隔都非常接近1秒。但是数字甚至不接近。

如果最后一次通话距离超过1秒,您将返回,如果距离小于1秒,我认为您应该返回


您的代码永远不会执行的操作(除非更正)是打印一个大于1000的值。

如果上次调用距离大于1秒,您将返回,我认为如果距离小于1秒,您应该返回


您的代码永远不会执行的操作(除非更正)是打印大于1000的值。

您的条件是错误的。看看这个:

if (lastTime > 1000) {
    return;
}
也就是说,如果上次调用该方法的时间超过一秒钟,请不要打印任何内容。因此,如果你连续多次快速调用它,它将始终在第一次调用后通过此检查

我怀疑你认为你想要


也可以考虑注入一个抽象的“获取当前时间”,以使所有这些都是可测试的…并且考虑使用而不是内置的库::

你的条件不正确。看看这个:

if (lastTime > 1000) {
    return;
}
也就是说,如果上次调用该方法的时间超过一秒钟,请不要打印任何内容。因此,如果你连续多次快速调用它,它将始终在第一次调用后通过此检查

我怀疑你认为你想要


也可以考虑注入一个抽象的“获取当前时间”,以使所有这些都是可测试的…并考虑使用而不是内置的库:(

< p>您的if语句是倒置的:

if(lastTime > 1000){
    return;
}

如果最后一个间隔超过1秒,则返回,这与您描述的相反。如果(lastTime<1000){


否则,我看不出您的代码有任何错误。

您的if语句被颠倒了:

if(lastTime > 1000){
    return;
}

如果最后一次间隔超过1秒,则返回,这与您描述的相反。请尝试将此更改为
if(lastTime<1000){


否则,我看不出你的代码有什么问题。

(主题外)如果你想让时间成为
long
,请使用
System.currentTimeMillis()
,而不是
new Date().getTime()
(主题外)如果你想让时间成为
long
,请使用
System.currentTimeMillis()
而不是
new Date().getTime()。)
System.nanoTime()
应该用来代替
System.currentTimeMillis()
来计算经过的时间。否则,+1。@Vulcan:是的,我忘记了。将修复。最好的,最详细的答案。不幸的是,我不能对它进行两次投票。所以,我做了
if(tm.checkTime())
它总是输入if,然后运行
return
基本上checkTIme总是返回
false
@ryannady:如果你调用它的次数足够多,它就不应该返回了。我刚刚自己检查了它,它工作得很好。你在
periodmissions
中传递了什么?
System.nanoTime()应使用
而不是
System.currentTimeMillis()
来计算经过的时间。否则,+1。@Vulcan:是的,我忘记了这一点。将修复最佳、最详细的答案。不幸的是,我无法对其进行两次投票。因此,我选择了
if(tm.checkTime())
它总是输入if,然后运行
return
基本上checkTIme总是返回
false
@ryannady:如果你经常调用它,它就不应该返回了。我自己刚刚检查过,它工作得很好。你在
periodmimess
中传递了什么?