Why are some KeyEvent keycodes throwing "IllegalArgumentException: Invalid key code"?
Asked Answered
T

2

3

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

Tolman answered 9/7, 2011 at 11:11 Comment(0)
W
7

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

Willpower answered 9/7, 2011 at 13:47 Comment(0)
J
1

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.

Jernigan answered 9/7, 2011 at 12:7 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.