如何检查是否按下了大写锁定键?

Ale*_*man 8 java capslock

好吧,在此之前被标记为可能重复,我已经尝试了以下代码:

Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)
Run Code Online (Sandbox Code Playgroud)

它总是对我不利[见下文].有人可以确认这是否应该有效,我是在滥用它,或者它是否已被破坏?如果它实际上已经坏了,有没有人有更好的使用方法?

编辑:

好吧,刚刚发现了更多的东西.它似乎只是返回我的程序启动时的状态.如果我用它启动程序,它会打开,反之亦然.这是我的代码:

while (true) {
    boolean isOn = Toolkit.getDefaultToolkit().getLockingKeyState(
        KeyEvent.VK_CAPS_LOCK);
    System.out.println("Caps lock is now: " + (isOn ? "ON" : "off"));
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
    }
}
Run Code Online (Sandbox Code Playgroud)

而这总是打印出它开始的任何东西

(例如,如果我开始大写锁定,即使我立即将其关闭,它也会打印出来:

大写锁定现在是:开

大写锁定现在是:开

大写锁定现在是:开

大写锁定现在是:开

等等,如果我从它开始,它将打印出来,无论如何)

Dav*_*ave 5

我觉得getLockingKeyState()可能会被打破.

您可以尝试使用KeyboardUtils,但看起来这意味着您必须携带JNA开销.