Why are some KeyEvent keycodes throwing "IllegalArgumentException: Invalid key code"?
I'm trying to automate some processes using Robot
and it seems certain keycodes (only symbols that require you to hold shift when typing it normally) in KeyEvent
are throwing an IllegalArgumentException
. This is all the code that's running in main
:
Robot r = new Robot()开发者_如何学JAVA;
r.keyPress(KeyEvent.VK_EXCLAMATION_MARK);
However, it works fine using the following workaround:
Robot r = new Robot();
r.keyPress(KeyEvent.VK_SHIFT);
r.keyPress(KeyEvent.VK_1);
Any ideas why the exception is thrown? Thanks!
Java version: 1.6.0_23
Because like the documentation for Robot.keyPress
says, an IllegalArgumentException
is thrown when the keycode
doesn't represent a valid key, and VK_EXCLAMATION_MARK
is not a valid key.
Keycodes are used to represent two things: keys on the keyboard, and "a character was typed" events. Typing a character often requires more than one keypress (in sequence, or simultaneously, or both). But Robot.keyPress
simulates the act of pressing a key (hence the name), not the act of typing a character.
For more information, see the documentation for KeyEvent: http://download.oracle.com/javase/6/docs/api/java/awt/event/KeyEvent.html
I don't know Robot
, but isn't that because it needs to be two keys pressed to an exclamation mark to be inserted.
There are no exclamation mark key on the keyboards.
精彩评论