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.
精彩评论