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

时间:2012-08-12 14:40:38

标签: 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();
        }

    }
}

例外:

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

1 个答案:

答案 0 :(得分:5)

我认为您收到错误是因为键盘上没有"键。 "几乎肯定会出现在键盘上的一个按键上,但很可能会被移动。你不应该试图'按'",而应该'按'Shift键和该键的'base'字符,即你自己输入键时得到的字符。

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

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();
        }
    }
}

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

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