Java awt Robot по-прежнему не может нажимать стрелки без цифровой клавиатуры в окнах?

Эта ошибка известна много лет, но все еще присутствует в версии Java 1.7.0_25, которую я использую в Windows 8. Следующий результат одинаков независимо от того, включен ли у меня numlock или нет:

Robot bot = new Robot();

bot.keyPress(KeyEvent.VK_UP); //this in documentation is non-numpad up arrow key
bot.keyRelease(KeyEvent.VK_UP); //pressed the numpad up arrow key

//folowing line is line #43
bot.keyPress(KeyEvent.VK_KP_UP); //this in documentation is numpad up arrow key
bot.keyRelease(KeyEvent.VK_KP_UP); //causes folowing exception:

Exception in thread "main" java.lang.IllegalArgumentException: Invalid key code
at sun.awt.windows.WRobotPeer.keyPress(Native Method)
at java.awt.Robot.keyPress(Robot.java:358)
at test.RobotArrow.main(RobotArrow.java:43)

Я знаю, что этот вопрос уже задавали здесь, но более года назад, так есть прогресс? Я ничего не могу погуглить, есть даже официальный отчет об ошибке

Так есть наконец решение или нет?


person kajacx    schedule 05.02.2014    source источник


Ответы (2)


// НАЖМИТЕ WINDOWS + СТРЕЛКА ВЛЕВО

Robot divideWindow = new Robot();
divideWindow.keyPress(KeyEvent.VK_WINDOWS);
divideWindow.delay(100);
divideWindow.keyPress(KeyEvent.VK_LEFT);
divideWindow.delay(100);
divideWindow.keyRelease(KeyEvent.VK_LEFT);
divideWindow.delay(100);
divideWindow.keyRelease(KeyEvent.VK_WINDOWS);

У меня работает нормально :)

person bhordupur    schedule 14.05.2014
comment
Я тестирую это с пустым JFrame и захватом события с помощью KeyboardFocusManager, и это не делает то, что я хочу. Я хочу нажать клавишу со стрелкой без цифровой клавиатуры с помощью робота, это нажимает клавиши со стрелкой + окна, таким образом перемещая мой JFrame соответственно, я этого не хочу. - person kajacx; 15.05.2014
comment
Это не замена клавишам со стрелками; он активирует ярлыки Windows для перемещения окон. - person ZX9; 29.04.2016

Возможный обходной путь — отключить numlock. См. комментарий к этой ошибке jdk

person Joe23    schedule 07.11.2016