Status von Caps- und NumLock auslesen

Robertop

Bekanntes Mitglied
Hallo zusammen,

ich würde gerne in einem Programm von mir auf den Status von Capslock und Numlock reagieren und habe bei einer schnellen Googlesuche gefunden, dass man das relativ leicht über das AWT Toolkit auslesen kann. Um das auszuprobieren habe ich mir eine kleine Klasse geschrieben, die alle paar Sekunden den Status der beiden Tasten in der Konsole ausgibt.

Mein Problem ist, dass das Programm den Status nicht zu aktualisieren scheint, solange es läuft. Das heißt, wenn zum Beispiel CAPSLOCK aktiv ist, wenn ich das Programm in Eclipse starte, dann wird jedes Mal CAPS LOCK: true ausgegeben, auch wenn ich die Taste ausschalte. Wenn ich aber das Programm dann beende und neustarte, wird korrekt CAPS LOCK: false angezeigt, aber dann auch noch, wenn ich die Taste wieder anmache.

Übersehe ich irgendwas? Warum wird die Statusänderung nicht erkannt, während das Programm läuft?

Java:
import java.awt.Toolkit;
import java.awt.event.KeyEvent;

public class CapsLockReader {

    public static void main(String[] args) throws InterruptedException {
        while (true) {
            boolean isCapsLocked = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
            boolean isNumLocked = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_NUM_LOCK);
            System.out.println("CAPS LOCK: " + isCapsLocked);
            System.out.println("NUM LOCK: " + isNumLocked);
            Thread.sleep(3000);
        }
    }
 

Neumi5694

Top Contributor
Mit dem Problem bist du nicht der Einzige. Der Wert wird nur ein einziges Mal richtig ausgelesen. Wenn du die Verzögerung vor die Abfrage einbaust, wird die Änderung während dieser Verzögerung korrekt erkannt.

Es wird empfohlen, stattdessen einen Keylistener zu implementieren, der auf das Drücken der Taste reagiert.
Vielleicht kann man beim Toolkit auch einen Refresh erzwingen, aber ich wüsste jetzt nicht wie.
 

Ähnliche Java Themen

Neue Themen


Oben