2016-03-30 45 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應用程序線程被延遲,差異也會增加,從而導致更高的錯誤率。