Java 机器人 - 在 mac 上输入 'a' 时出现问题

Java Robot - Issue typing 'a' on mac

所以我有以下代码:

public static void main(String[] args) throws AWTException, InterruptedException {
    Robot robot = new Robot();

    robot.setAutoWaitForIdle(true);
    robot.setAutoDelay(40);

    // This works fine
    robot.mouseMove(40, 130);
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.delay(200);
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    robot.delay(200);

    // The 'a' is never inputted
    robot.keyPress(KeyEvent.VK_A);
    robot.delay(200);
    robot.keyRelease(KeyEvent.VK_A);
}

此代码成功将鼠标移动到位置 40、130 并单击。我确保在此位置打开一个文本编辑器,使其成为焦点。

下一段代码就是问题所在。 keyPress/Release 片段对其他代码非常有效。 (如 100,对应数字 4。)但由于某些原因,字母 'a' 不会打印到文本编辑器中。

我试过让程序不断循环并打印 ~5 秒。程序单击后,它不会在文本编辑器中打印 'a'。如果我自己在这段时间再次点击编辑器,'a's 的字符串就会开始出现。

是什么导致了这种行为,我该如何解决?

正如我在评论中所假设的那样,我认为您在正确聚焦编辑器时遇到了问题。 您可以通过 ALT+TAB 尝试使用 Windows 解决方案,然后将其发布给 select 编辑器。

Robot robot = new Robot();

robot.setAutoWaitForIdle(true);
robot.setAutoDelay(40);

robot.keyPress(KeyEvent.VK_ALT);//on mac use VK_META
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_ALT);//on mac use VK_META
robot.keyRelease(KeyEvent.VK_TAB);

robot.keyPress(KeyEvent.VK_A);
robot.delay(200);
robot.keyRelease(KeyEvent.VK_A);