Java awt机器人仍然无法在windows上按非numpad箭头?

Java awt机器人仍然无法在windows上按非numpad箭头?,java,awt,keypress,awtrobot,arrow-keys,Java,Awt,Keypress,Awtrobot,Arrow Keys,这个bug已经知道很多年了,但它仍然存在于我在Windows8上使用的Java1.7.0\u25版本中。无论是否打开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

这个bug已经知道很多年了,但它仍然存在于我在Windows8上使用的Java
1.7.0\u25
版本中。无论是否打开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)
我知道这个问题已经被问到了,但是一年多以前,有什么进展吗?我不能谷歌任何东西,甚至有一个


那么,最终是否有解决方案?

//按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);

对我来说效果很好:)

一个可能的解决方法是禁用numlock。请参见

我正在使用空JFrame测试此功能,并使用KeyboardFocusManager捕获事件,但这并不是我想要的。我想通过Robot按下一个非numpad箭头键,这按下windows+箭头键,从而相应地移动我的JFrame,我不想这样。这不是按下箭头键的替代品;它将激活Windows快捷方式以移动窗口。