2016-03-30 11 views
0

キーボードボタンを押してコード行を実行するまでの遅延を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

java Systemのドキュメントによれば、System.nanoTime()を使用して、より高い解像度のタイマーを使用するアクションの所要時間を測定することができます。プラットフォームに基づいて、わずかなエラーレートが発生する可能性があります。

は、さらにあなたがGUIのためのJavaFXを使用しているので、以下は、それが の撮影のためにネイティブのイベントキューを使用し、すべてのイベントをバッチ処理JavaFXのアーキテクチャによるとthis answer

からコピーされます。キャプチャすることによって、その時点でイベントが生成されたこと(ユーザが ボタンをクリックしたこと)が と理解されます。 JavaFX が内部的にその情報を保持していない限り、バッチ処理を考慮して、イベントが生成された時刻に関する情報がすでに失われていることがわかりました。com.sun.javafx パッケージの詳細を調べることができます。 1秒の1/60秒ごとに、 予定パルスイベントがあります。パルスイベントの間、MouseEventなどの他のすべてのJavaFXイベント は、通常のJavaFXイベント ディスパッチメカニズムを介して起動されます。この時点で、アプリケーションは、イベントが発生したという通知をJavaFXから受信します。 ですから、 の理想的な世界では、イベントが投稿された時刻と、 が処理された時刻の差が< 0.0166(6)秒である必要があります。要するに

SPACEキーが実際ヒットしたときに、キーを打ったときのJavaFXはあなたを伝えるとき、違いは< 0.0166(6)秒である必要があり、異なる値、です。だからあなたはこれを考慮に入れる必要があります。何らかの理由でJavaFXアプリケーションスレッドが遅れても、その差が増え、エラー率が上がることにも注意してください。

関連する問題