【问题标题】:Java awt Robot still cant press non-numpad arrows on windows?Java awt Robot 仍然无法在 Windows 上按非数字键盘箭头?
【发布时间】:2014-03-02 00:23:32
【问题描述】:

这个错误已经存在多年,但仍然存在于我在 Windows 8 上使用的 Java 1.7.0_25 版本中。无论我是否打开了数字锁定,以下结果都是相同的:

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)

我知道这个问题已经被问过here,但是一年多以前,有什么进展吗?我不能谷歌任何东西,甚至有一个ofiicial bug report

那么,到底有没有解决办法?

【问题讨论】:

    标签: java awt keypress awtrobot arrow-keys


    【解决方案1】:

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

    对我来说很好:)

    【讨论】:

    • 我正在用空的 JFrame 测试它并用 KeyboardFocusManager 捕获事件,但这并没有达到我想要的效果。我想通过机器人按一个非数字键盘的箭头键,这个按 windows + 箭头键,从而相应地移动我的 JFrame,我不想要那个。
    • 这不能代替按箭头键;它将激活 Windows 快捷方式来移动窗口。
    【解决方案2】:

    一种可能的解决方法是禁用数字锁定。见this jdk bug comment

    【讨论】:

      猜你喜欢
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      相关资源
      最近更新 更多