Как проверить состояние ключа NUM LOCK в Java переносимым способом без отображения кадра? - PullRequest
2 голосов
/ 11 января 2012

Я хочу знать во время выполнения, включена или выключена клавиша NUM LOCK или CAPS LOCK.Но мне нужно сделать это переносимым способом (для всех платформ Java).

Следующие два метода не работают:

1) Он генерирует исключение UnsupportedOperationException: Toolkit.getLockingKeyState под Linux сOpenJDK-6:

Toolkit toolkit = Toolkit.getDefaultToolkit();
boolean numlock = toolkit.getLockingKeyState(KeyEvent.VK_NUM_LOCK);

2) Он отображает фрейм, но нам нужно сделать это без отображения артефактов (идея найдена здесь ):

import java.awt.*;
import java.awt.event.*;

public class Test {

    public static void main(String[] args) throws AWTException {

        // create AWT component
        Frame f = new Frame();
        // handle component's keyPressed event
        f.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent ev) {
                System.out.println(Character.isUpperCase(
                  ev.getKeyChar()) ? 
                    "Caps Lock ON" : 
                    "Caps Lock OFF");
            }       
        });
        // make component visible (otherwise the Robot won't work)
        f.show();
        // create Robot
        Robot robot = new Robot();
        // generate simple caracter key press
        robot.keyPress(KeyEvent.VK_A);  

    }

}
...