计算按下按钮和执行代码行之间的延迟的方法

时间:2016-03-30 11:38:17

标签: java javafx

是否有可能在Java / JavaFX中评估按下键盘按钮和执行代码行之间的延迟?想象一下情况,我向用户展示刺激,其任务是在他或她感知刺激时击中SPACE键。如何最准确地获得显示刺激和敲击键盘键之间的延迟?

到目前为止,我已经使用过这样的东西:

long start_time = System.currentTimeMillis();
displayTheStimulus();

long end_time;
if (spacebarIsHitted()) {
    end_time = System.currentTimeMillis();
} else {
    end_time = start_time;
}

long difference = end_time-start_time

我怎么能确定这种方法给出的值是否有效且准确?有没有办法评估这种方法的准确程度?

1 个答案:

答案 0 :(得分:1)

根据java System文档,您可以使用System.nanoTime()来测量某些操作所需的时间,它使用更高分辨率的计时器(取决于底层平台的可用性)。基于该平台,您可能会有轻微的错误率。

此外,由于您使用JavaFX for GUI,因此从this answer

复制以下内容
  

根据JavaFX Architecture,它使用本机事件队列   捕获和批处理所有事件。通过捕获它是理解的   在那个时刻生成了事件(用户点击了   按钮)。考虑到批处理我们已经失去了   有关事件生成时间的信息(除非JavaFX   在内部保存该信息,您可以检查com.sun.javafx   包含较低级别的详细信息)。每1/60秒就有一个   预定脉冲事件。在脉冲事件期间所有其他JavaFX事件   像MouseEvent等通过普通的JavaFX事件触发   调度机制。此时您的申请将会   从JavaFX收到发生事件的通知。所以   一个理想的世界,一个事件发布的时间与之间的差异   它的处理时间应该是< 0.0166(6)秒。

简而言之,当SPACE键实际命中时,当JavaFX告诉您键被击中的时间是不同的值时,差异应该是< 0.0166(6)秒。所以你必须考虑到这一点。值得注意的是,如果由于任何原因JavaFX应用程序线程被延迟,差异也会增加,因此错误率会更高。