为什么一些KeyEvent键码会抛出“IllegalArgumentException:无效的密钥代码”?

时间:2011-07-09 11:11:31

标签: java

我正在尝试使用Robot自动执行某些流程,而KeyEvent中的某些密钥代码(只有在正常输入时才需要保留移位的符号)才会抛出IllegalArgumentException 。这是main中运行的所有代码:

Robot r = new Robot();
r.keyPress(KeyEvent.VK_EXCLAMATION_MARK);

但是,使用以下解决方法可以正常工作:

Robot r = new Robot();
r.keyPress(KeyEvent.VK_SHIFT);
r.keyPress(KeyEvent.VK_1);

为什么抛出异常的任何想法?谢谢!

Java版本:1.6.0_23

2 个答案:

答案 0 :(得分:6)

因为与Robot.keyPress的文档一样,当IllegalArgumentException不代表有效密钥时,会引发keycode,并且VK_EXCLAMATION_MARK不是有效密钥。

键码用于表示两件事:键盘上的键和“键入字符”事件。键入一个字符通常需要多个按键(按顺序,或同时,或两者)。但是Robot.keyPress模拟按键的行为(因此命名),而不是键入字符的行为。

有关详细信息,请参阅KeyEvent的文档:http://download.oracle.com/javase/6/docs/api/java/awt/event/KeyEvent.html

答案 1 :(得分:1)

我不知道Robot,但不是因为它需要按两个键才能插入感叹号。

键盘上没有感叹号键。