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);
所以我有以下代码:
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);