Hallo zusammen,
Ich arbeite an einer Java-Anwendung, in der ich Java verwende .awt.Robot-Klasse zur Simulation von Tastatureingaben. Es funktioniert für die meisten Zeichen gut, aber ich stoße auf ein Problem, wenn ich versuche, Sonderzeichen wie : und / einzugeben.
Hier ist die Methode, die ich zum Umgang mit Sonderzeichen verwende:
Code: Select all
private void digitarCaracterEspecial(Robot robot, char c) {
try {
switch (c) {
case ':':
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON); // ':' = Shift + ';'
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
break;
case '/':
robot.keyPress(KeyEvent.VK_SLASH); // Verifique o layout do teclado
robot.keyRelease(KeyEvent.VK_SLASH);
break;
case '&':
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_7); // '&' = Shift + '7' in US keyboard
robot.keyRelease(KeyEvent.VK_7);
robot.keyRelease(KeyEvent.VK_SHIFT);
break;
default:
System.err.println("Unsupported special character: " + c);
}
} catch (Exception e) {
System.err.println("Error while typing special character: " + c);
e.printStackTrace();
}
}
Wenn ich versuche, : oder / einzugeben, erhalte ich die folgende Ausnahme:
Code: Select all
java.lang.IllegalArgumentException: Invalid key code
at java.desktop/sun.awt.windows.WRobotPeer.keyPress(Native Method)
at java.desktop/java.awt.Robot.keyPress(Robot.java:393)
Code: Select all
Robot robot = new Robot();
String text = "https://example.com:8080/";
for (char c : text.toCharArray()) {
if (KeyEvent.getExtendedKeyCodeForChar(c) == KeyEvent.CHAR_UNDEFINED) {
digitarCaracterEspecial(robot, c);
} else {
robot.keyPress(KeyEvent.getExtendedKeyCodeForChar(c));
robot.keyRelease(KeyEvent.getExtendedKeyCodeForChar(c));
}
}
- Betriebssystem: Windows 10
- JDK-Version: OpenJDK 21
- Tastaturlayout: Brasilianisches ABNT2
- Verifiziert KeyEvent.VK_*-Konstanten für: und /.
- Verwendete Umschaltkombinationen für: und andere Sonderzeichen.
- Bestätigt, dass das Tastaturlayout korrekt ist.< /li>
Alternative Ansätze ausprobiert, wie z. B. die Festcodierung der Schlüsselcodes.
- Warum ist das java.awt.Robot löst für diese Zeichen eine Ausnahme aufgrund eines ungültigen Tastencodes aus?
- Gibt es eine robustere Möglichkeit, die Eingabe von Sonderzeichen mit Robot über verschiedene Tastaturlayouts hinweg zu handhaben?
- Könnte es sich um ein Layout-spezifisches Problem handeln (z. B. brasilianische ABNT2- oder US-Tastatur)?