Zeitkritisches auslesen von Tastatureingaben

Mariusla

Mitglied
Hallo!

Für einen psychologischen Test (vgl. auch mein Posting zu BufferedImages) will ich Tastatureingaben möglichst in Echtzeit erfassen. Mir ist klar dass durch die Hardware und die ganzen Schichten dazwischen (USB-Treiber ect.) Latenzen entstehen, die weder ich noch Java beeinflussen können.

Mir geht es darum, die Latenz die in der JVM entsteht, möglichst gering zu halten. In allen Büchern, auch in denen über Spieleprogrammierung, wird einfach ein KeyListener an eine Swing-Komponente gebunden. Aber wenn ich das richtig verstehe ist es dann ein bisschen Glückssache (bzw. zusatandsabhängig) wie schnell der event dispatch thread reagiert.

Ist diese Befürchtung begründet; und wenn ja, kennt jemand eine bessere Lösung? Mit den ca. 20 ms Latenz durch USB kann ich leben, aber wenn dann nochmal eine unsystematische Streuung im zweistelligen ms-Bereich durch Java dazukommt wird es langsam schwierig.

Viele Grüße, Marius
 

Runtime

Top Contributor
Ich glaube kaum, dass dafür 20ms gebraucht werden, wohl eher nicht. Wenn du es trotzdem ohne die Javaverarbeitungszeit machen willst, dann musst du das mit C/C++ & JNI erledigen.
 

Mariusla

Mitglied
Hallo!

Die 20 ms habe ich mal in einem Technikforum aufgeschnappt, in dem sich Freaks über die Latenzen von über USB verbundenen Geräten ausgetauscht haben. Drum wollte ich zumindest JVM-Latenzen eliminieren. Ich versuch's mal mit JNI, das hätte ja noch den schönen Vorteil dass der KeyLIstener nicht auf den Fokus der Swing-Komponente angewiesen ist.

Vielen Dank, viele Grüße, Marius
 

muckelzwerg

Bekanntes Mitglied
Ich will nicht den Spielverderber geben, aber ... mach doch erstmal eine Messung.
Es ist zwar gängig, dass man pauschal irgendwelche Verluste wegoptimieren will, ohne überhaupt jemals zu schauen, ob diese Verluste relevant sind, bzw. überhaupt existieren, aber gut ist das deshalb noch lange nicht.

20ms Verzögerung? Das ist schon einiges. Bist Du da sicher? Willst Du das einfach so glauben? Kannst Du es prüfen? Wenn nicht, wie willst Du dann rausbekommen, ob Deine Optimierungen was bringen? ;)
Und warum ist die Verzögerung überhaupt interessant? Du willst doch damit nicht auf die Uhr schauen, sondern Reaktionszeiten messen. Brauchst Du dafür eine gerine Verzögerung oder vielleicht doch eher eine bekannte und möglichst konstante Verzögerung?
 
S

SlaterB

Gast
von wo bis wo soll denn gemessen werden, ab einer bestimmten vorherigen Darstellung auf dem Monitor?
wenn man da auch noch irgendwelche Verzögerungen für möglich hält, sei es durch Arbeit an sich, sei es durch Warten aus diversen Gründen (allein Unterbrechung durchs Betriebssystem)..

dann gibt ja noch das Problem, dass zumindest in Java mit dem verbreiteten System.currentTimeMillis() eh nur auf ca. 20 ms genau gemessen werden kann,
System.nanoTime() mag hier helfen

also ich sehe da schwarz, gerade in Java mit seinem Sandkasten-Ansatz
'niemand weiß was genau der Untergrund macht, aber innerhalb der gesetzen Grenzen läuft alles korrekt ab'

wenn das überhaupt ohne spezielle Hardware umzusetzen ist, dann sicher besser in einer direkteren Sprache
 

muckelzwerg

Bekanntes Mitglied
Das kann auch in Java gut funktionieren. Eine Verzögerung gibt es doch immer. Aber man will vielleicht eher nicht eine Uhrzeit aufschreiben, die "ungefähr" angibt, wann das Bild zu sehen war und eine weitere, "ungefähr" wann die Reaktion kommt usw.
Wenn es zum Beispiel darum geht, die Reaktionszeiten zwischen verschiedenen Testvarianten zu vergleichen, dann sind die absoluten Zahlen vielleicht gar nicht relevant.
Da stellt sich dann nur die Frage "wieviel schnell/langsamer lief es bei Test X,Y,Z?".
Für solche Messungen ist die Dauer der Verzögerung gar nicht relevant.
Gerade bei der Psychologie geht es vielleicht viel mehr um Vergleiche, als um die eher medizinische Frage nach der absoluten Verzögerung.

Für den Fall, dass man tatsächlch die genauen Reaktionszeiten messen will, wäre es nochmal viel wichtiger die Verzögerungen zu kennen und sie möglichst konstant zu halten. Da könnte man das System auch einmal sauber durchmessen und kalibrieren. Danach rechnet man die x ms jedesmal raus. Wieviel ms die dann beträgt ist doch irrelevant. Und das macht es in einer anderen Sprache auch kein bisschen leichter. Da muss man genauso messen und rausrechnen. Man kann ja nicht einfach sagen "Ach egal, die Verzögerung ist null, weil das ist ja C." Dann ist sie halt kleiner, das ändert aber doch an keinem Schritt der Kette etwas.
 

HoaX

Top Contributor
Muss es die Tastatur sein oder gehen auch andere externe Eingabegeräte?
Je nach Anwendungsfall ist es ggf einfacher eine spezielle Hardware zu verwenden die dann noch einen Timestamp mitschickt, so kann man dann zumindest zwischen zwei Eingaben die Zeit sehr genau bestimmen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Swing Wert aus Textfeld auslesen -- null Fehler AWT, Swing, JavaFX & SWT 4
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
J JFram Location aus Konstruktor einer anderen Klasse auslesen AWT, Swing, JavaFX & SWT 10
it_is_all Swing Mehrere JComboBoxen - wie die versch. Boxen mit ItemStateChange auslesen? AWT, Swing, JavaFX & SWT 3
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
Soloeco Swing JTextField auslesen Klassen übergreifend AWT, Swing, JavaFX & SWT 16
M JavaFX - Array in View auslesen AWT, Swing, JavaFX & SWT 12
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
B JavaFX Symbole aus Fonts auslesen AWT, Swing, JavaFX & SWT 1
sandaime Swing Thread für CMD auslesen AWT, Swing, JavaFX & SWT 16
G Werte aus dem GUI Auslesen AWT, Swing, JavaFX & SWT 8
3 JComboBox - Action - Auslesen & Umwandeln AWT, Swing, JavaFX & SWT 9
X Swing Per Button die Labels und Textfelder auslesen AWT, Swing, JavaFX & SWT 8
D JavaFX Dynamisch erzeugte Checkboxen aus VBox auslesen AWT, Swing, JavaFX & SWT 3
thobren JavaFX Inhalte aus dynamischen vbox mit TextArea auslesen AWT, Swing, JavaFX & SWT 9
F geänderten Textfeldinhalt mit parse auslesen AWT, Swing, JavaFX & SWT 1
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
M JavaFX Wert aus Tabellenzelle auslesen AWT, Swing, JavaFX & SWT 4
M Swing JFreechart X-Achse Tick auslesen AWT, Swing, JavaFX & SWT 13
T Swing jComboBox auslesen mit Datenbankanbindung AWT, Swing, JavaFX & SWT 3
P Swing JTable Werte auslesen bzw überschreiben AWT, Swing, JavaFX & SWT 5
O Swing Text aus Textfield auslesen AWT, Swing, JavaFX & SWT 8
T Swing "Textgröße" aus OS auslesen AWT, Swing, JavaFX & SWT 3
D Swing Farbe aus Pixel vom JFrame auslesen AWT, Swing, JavaFX & SWT 17
R Array aus einem Objekt auslesen AWT, Swing, JavaFX & SWT 4
F Swing jComboBox auslesen AWT, Swing, JavaFX & SWT 6
T SWT Table (mit Spinner Spalte) Daten auslesen AWT, Swing, JavaFX & SWT 4
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
X Gridbaglayout gridx + gridy auslesen? AWT, Swing, JavaFX & SWT 7
M JTextField gibt beim auslesen null aus AWT, Swing, JavaFX & SWT 9
L SWT Eingabefelder beim Schließen des Forms auslesen AWT, Swing, JavaFX & SWT 3
D Applet Auslesen von Images aus Ressourcen AWT, Swing, JavaFX & SWT 29
F icon aus exe auslesen mithilfe des JFilechooser ? AWT, Swing, JavaFX & SWT 4
F Textfelder auslesen AWT, Swing, JavaFX & SWT 12
T 3D-Grafik (Java3D) Aus einem Objekt einer Szene (Würfel, Ebene) die wichtigen Randkoordinaten auslesen AWT, Swing, JavaFX & SWT 3
P gleichanfangende Zeilen solange auslesen bis es die gibt AWT, Swing, JavaFX & SWT 12
J JTextField auslesen lassen AWT, Swing, JavaFX & SWT 4
C Swing TextField auslesen AWT, Swing, JavaFX & SWT 21
C TextFelder auslesen AWT, Swing, JavaFX & SWT 20
E Textfeld auslesen AWT, Swing, JavaFX & SWT 2
F SWT Tabelle Zeile auslesen AWT, Swing, JavaFX & SWT 3
M Position eines JLabels mit getX() auslesen AWT, Swing, JavaFX & SWT 2
D SWT CheckBox auslesen (Window Builder Pro) AWT, Swing, JavaFX & SWT 2
E Wert eines selektierten Knotens in einem JTree auslesen AWT, Swing, JavaFX & SWT 3
J Mausposition auslesen AWT, Swing, JavaFX & SWT 4
L Name des JLabels auslesen bei Mouseclick AWT, Swing, JavaFX & SWT 2
A Swing Slider-Value auslesen und weitergeben AWT, Swing, JavaFX & SWT 4
B Swing Betrag mit Komma aus jformattedtextfield auslesen. AWT, Swing, JavaFX & SWT 2
Y JSlider Wert auslesen (Kategorien) AWT, Swing, JavaFX & SWT 2
K Text vom JTextField auslesen AWT, Swing, JavaFX & SWT 9
E werte aus List auslesen AWT, Swing, JavaFX & SWT 2
R Textfield auslesen auf Anforderung AWT, Swing, JavaFX & SWT 4
M Swing JTextField "onthefly" auslesen und berechnen AWT, Swing, JavaFX & SWT 7
C Swing JPasswordField Password auslesen AWT, Swing, JavaFX & SWT 7
K 2D-Grafik Fehler beim Farbe auslesen AWT, Swing, JavaFX & SWT 3
K JTable Werte auslesen AWT, Swing, JavaFX & SWT 2
T JSpinner in JTable: Problem beim Auslesen, funktioniert erst beim Zellwechsel AWT, Swing, JavaFX & SWT 7
3 2D-Grafik Rechtecke auf Bilder legen und auslesen AWT, Swing, JavaFX & SWT 4
P Swing ComboBox(en) in JTable auslesen und ausgeben AWT, Swing, JavaFX & SWT 11
1 Textfeld auslesen AWT, Swing, JavaFX & SWT 11
R TextField auslesen & in Objekteigenschaften speichern AWT, Swing, JavaFX & SWT 22
J JSpinner + SpinnerNumberModel int auslesen AWT, Swing, JavaFX & SWT 2
S JPanel auslesen AWT, Swing, JavaFX & SWT 3
S JTextField auslesen AWT, Swing, JavaFX & SWT 2
M JTabbedPane - Tab auslesen AWT, Swing, JavaFX & SWT 2
M auslesen mehrerer JComboBoxen funktioniert nicht AWT, Swing, JavaFX & SWT 9
M Java swt link url auslesen AWT, Swing, JavaFX & SWT 5
T ComboBox auslesen AWT, Swing, JavaFX & SWT 11
Airwolf89 Swing Pfad mit "\" auslesen AWT, Swing, JavaFX & SWT 6
N jTable mit JComboBox auslesen AWT, Swing, JavaFX & SWT 6
P Swing Hintergrundfarbe auslesen und wieder setzen AWT, Swing, JavaFX & SWT 4
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
F checkboxen auslesen/ansprechen AWT, Swing, JavaFX & SWT 1
T SWT Canvas Koordinaten per MouseMove auslesen AWT, Swing, JavaFX & SWT 1
C Swing Mit jTree ein Ordneröffnen Dialog machen? Und Ordner Inhalt auslesen? AWT, Swing, JavaFX & SWT 4
S Bilder aus der Google Book Search API auslesen AWT, Swing, JavaFX & SWT 3
J Daten in JTable nach Sortierung auslesen AWT, Swing, JavaFX & SWT 2
S Swing noch nicht übergebenen Wert aus JComboBox auslesen AWT, Swing, JavaFX & SWT 4
JavaKaffee Array auslesen in jTextPane? AWT, Swing, JavaFX & SWT 9
A Auslesen eines JTextField AWT, Swing, JavaFX & SWT 3
M Comboboxen in JTable - Werte auslesen AWT, Swing, JavaFX & SWT 9
calzone Swing JTable/DefaultTableModel, rowData auslesen ? AWT, Swing, JavaFX & SWT 15
P List-Einträge auslesen AWT, Swing, JavaFX & SWT 4
D Inhalt einer JTable Celle auslesen AWT, Swing, JavaFX & SWT 3
N JFilechooser File auslesen AWT, Swing, JavaFX & SWT 10
T JTree auslesen AWT, Swing, JavaFX & SWT 4
K Textfelder auslesen gibt immer Fehler AWT, Swing, JavaFX & SWT 2
A Wert einer JComboBox auslesen AWT, Swing, JavaFX & SWT 1
M JPasswordfield.getpassword() char[] nicht codiert auslesen? AWT, Swing, JavaFX & SWT 2
S JAVA-Doc intern auslesen AWT, Swing, JavaFX & SWT 2
C jComboBox KeyListener -> Box auslesen AWT, Swing, JavaFX & SWT 3
G JTable Daten auslesen AWT, Swing, JavaFX & SWT 2
J Integer aus Textdatei auslesen und in Variable speichern AWT, Swing, JavaFX & SWT 11
A Problem mit JFormattedTextField auslesen AWT, Swing, JavaFX & SWT 11
O JTable auslesen AWT, Swing, JavaFX & SWT 2
T Pixelfarbe auslesen AWT, Swing, JavaFX & SWT 4
M Auslesen veränderter Daten in einer jTable AWT, Swing, JavaFX & SWT 2
A Fehler beim Auslesen aus einem Textfeld AWT, Swing, JavaFX & SWT 2
O Datei binär auslesen AWT, Swing, JavaFX & SWT 2
Y Zahlen aus einer Textarea auslesen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben