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

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

Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK) 

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

编辑:

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

 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) { } } 

并且它总是打印出它开始的任何东西

(例如,如果我从大写锁定开始,即使我之后立即关闭它,它会打印:

大写锁定现在是:开启

大写锁定现在是:开启

大写锁定现在是:开启

大写锁定现在是:开启

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

四处getLockingKeyState() ,我认为getLockingKeyState()可能会被破坏。

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

 public void checkOnOff() { Thread th = new Thread() { public void run() { for (;;) { if (Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)) { jLabel4.setForeground(Color.red); jLabel4.setText("CAPSLOCK is ON"); } else { jLabel4.setText(null); } try { sleep(100); } catch (InterruptedException ex) { Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex); } } } };th.start(); }