2016-03-30 14 views
0

Ist es möglich, in Java/JavaFX die Verzögerung zwischen dem Drücken der Tastaturtaste und der Ausführung der Codezeile auszuwerten? Stellen Sie sich eine Situation vor, in der ich dem Benutzer einen Stimulus präsentiere und seine Aufgabe darin besteht, die SPACE-Taste zu drücken, wenn er diesen Stimulus wahrnimmt. Wie kann ich am genauesten die Verzögerung zwischen der Anzeige des Stimulus und dem Drücken der Tastaturtaste erhalten?Die Methode der Berechnung der Verzögerung zwischen dem Drücken der Taste und der Ausführung der Codezeile

Bis heute warte ich so etwas wie dieses verwendet haben:

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 

Wie kann ich sicher sein, dass mit dieser Methode angegebenen Werte sind gültig und korrekt? Gibt es eine Möglichkeit zu bewerten, wie genau diese Methode ist?

Antwort

1

Laut Dokumentation von java System können Sie System.nanoTime() verwenden, um zu messen, wie lange eine Aktion dauert, die einen Timer mit höherer Auflösung verwendet (abhängig von der Verfügbarkeit auf der zugrunde liegenden Plattform). Basierend auf der Plattform können Sie eine leichte Fehlerrate haben.

Darüber da Sie verwenden JavaFX für GUI, wird die folgende kopiert von this answer

Nach JavaFX Architektur es die native Ereigniswarteschlange für Capturing verwendet und Dosiersysteme alle Ereignisse. Unter der Erfassung wird verstanden, , dass zu diesem Zeitpunkt das Ereignis generiert wurde (der Benutzer klickte die Schaltfläche). Unter Berücksichtigung der Stapelverarbeitung haben wir bereits die Informationen über die Zeit, zu der das Ereignis generiert wurde, verloren (es sei denn, JavaFX speichert diese Informationen intern, Sie können com.sun.javafx Pakete für Details auf niedrigeren Ebenen überprüfen). Jede 1/60 Sekunde gibt es ein geplantes Pulsereignis. Während des Pulsereignisses werden alle anderen JavaFX-Ereignisse wie MouseEvent usw. über das normale JavaFX-Ereignis Dispatching-Mechanismus ausgelöst. An diesem Punkt erhält Ihre Anwendung eine Benachrichtigung von JavaFX, dass ein Ereignis aufgetreten ist. Also in eine ideale Welt der Unterschied zwischen der Zeit, die ein Ereignis gebucht wurde und die Zeit, die es behandelt wurde, sollte < 0,0166 (6) Sekunden sein.

Kurz gesagt, wenn die Leertaste tatsächlich Hit ist und wenn JavaFX Sie sagt, wenn der Schlüssel wurde getroffen sind verschiedene Werte, wo Differenz sollte < 0,0166 (6) Sekunden sein. Sie müssen dies berücksichtigen. Es ist auch erwähnenswert, dass, wenn JavaFX Application Thread aus irgendwelchen Gründen verzögert wird, die Differenz ebenfalls zunimmt, daher eine größere Fehlerrate.

Verwandte Themen