在Java中检索当前的大写锁定状态

时间:2014-12-30 06:53:08

标签: java

使用以下代码:

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

不幸的是,只返回false。

根据文档,这应该有效:http://docs.oracle.com/javase/8/docs/api/java/awt/Toolkit.html#getLockingKeyState-int-

可运行的例子:

import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class Foo {

    public static void main(String[] args) {

        ExecutorService executorService = Executors.newFixedThreadPool(1);

        executorService.execute(new Runnable() {
            public void run() {
                while(true) {
                    try{ Thread.sleep(250); }catch(Exception ignored) { }
                    System.out.println("Capslock state: " + Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
                }
            }
        });

        executorService.shutdown();
    }

}

应该补充说我在Windows上使用Java SE 1.8并且我的Caplock键工作正常

控制台输出的屏幕截图:

enter image description here

2 个答案:

答案 0 :(得分:2)

您的代码适用于我。我只是剪切粘贴你的代码,编译它,运行它,并在它运行时点击大写锁定。这是输出:

$ javac Foo.java
$ java Foo
Capslock state: false
Capslock state: false
Capslock state: false
Capslock state: false
Capslock state: true
Capslock state: true
Capslock state: true
Capslock state: true
Capslock state: true
Capslock state: true
Capslock state: true
Capslock state: true
Capslock state: false
Capslock state: false
Capslock state: false
^C

我正在使用java 8,和你一样。

$ java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

你的大写锁定键是否正常工作?

答案 1 :(得分:0)

您的代码在java 1.7.0_25和6上运行正常。只需复制粘贴并使用netbeans运行。

结果如下

Capslock state: true
Capslock state: true
Capslock state: true
Capslock state: true
Capslock state: true
Capslock state: true
Capslock state: true
Capslock state: true
pslock state: true
Capslock state: true

它应该适用于java 8你尝试过使用IDE吗?

我使用的是Windows 7。