2016-03-30 44 views
0

可以在Java/JavaFX中评估按下键盘按钮和执行代码行之间的延迟吗?设想一下情况,我向用户展示一个刺激,其任务是当他或她觉察到刺激时打空间键。我怎样才能最准确地获得显示刺激和击键键之间的延迟?计算按下按钮和执行代码行之间的延迟的方法

为了这一天,我用这样的:

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

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

此外,由于你使用JavaFX的GUI,下面是从this answer

复制根据JavaFX的体系结构,它使用的本地事件队列 捕获并分离所有事件。通过捕获它可以理解为 在那个时刻事件已经产生(用户点击了 这个按钮)。考虑到批处理,我们已经丢失了有关事件产生时间的信息(除非JavaFX 内部保存了这些信息,否则您可以查看com.sun.javafx 包以了解更低级别的详细信息)。每1/60秒有一个 排定的脉冲事件。在脉冲事件期间,所有其他JavaFX事件 (如MouseEvent等)均通过正常的JavaFX事件 调度机制触发。在这一点上,您的应用程序 将从JavaFX接收事件发生的通知。因此,在 理想世界中,发布事件的时间与处理该事件的时间之差应该是< 0.0166(6)秒。

总之,当空格键实际上命中和JavaFX的时候告诉你钥匙被击中时有不同的值,其中差异应该是< 0.0166(6)秒。所以你必须考虑到这一点。值得注意的是,如果因任何原因JavaFX应用程序线程被延迟,差异也会增加,从而导致更高的错误率。