当按下引号键时,java.awt.Robot.keyPress抛出IllegalArgumentException

alt*_*189 2 java keyevent awtrobot

当您尝试使用Robot.keyPress键入"(双引号)时,它会抛出java.lang.IllegalArgumentException:无效的键代码.

我该如何解决或解决这个问题?

如果它有帮助,我目前在Windows上.

测试代码:

import java.awt.Robot;
import java.awt.event.KeyEvent;

public class Test {
    public static void main(String[] args) throws Exception {
        Robot robot = new Robot();
        try {
            robot.keyPress(KeyEvent.VK_QUOTEDBL);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

例外:

java.lang.IllegalArgumentException: Invalid key code
    at sun.awt.windows.WRobotPeer.keyPress(Native Method)
    at java.awt.Robot.keyPress(Robot.java:358)
Run Code Online (Sandbox Code Playgroud)

Luk*_*ard 6

我认为你得到一个错误,因为"键盘上没有键. "几乎肯定会在键盘上的一个键上,但它很可能会被移动."你不应该试图"按下" ,而是"按"Shift键和该键的"基本"字符,即你自己键入键时得到的字符.

我发现在命令提示符下运行以下类给我留下了一个"字符:

import java.awt.Robot;
import java.awt.event.KeyEvent;

public class Test {
    public static void main(String[] args) throws Exception {
        Robot robot = new Robot();
        try {
            robot.keyPress(KeyEvent.VK_SHIFT);
            robot.keyPress(KeyEvent.VK_2);
            robot.keyRelease(KeyEvent.VK_SHIFT);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在英国键盘上(我正在使用),"角色被移动2,这就是我使用的原因KeyEvent.VK_2.它可能在其他键盘上的其他位置 - 如果我没记错的话,它会在美国键盘上移动单引号.在这种情况下,您将使用VK_QUOTE而不是VK_2.

我还发现释放VK_SHIFT按键是必要的,以避免Windows的各种奇怪,认为Shift键仍然被按下.