Problem mit java.awt.Robot KeyEvent für Sonderzeichen (z. B. : und /)Java

Java-Forum
Guest
 Problem mit java.awt.Robot KeyEvent für Sonderzeichen (z. B. : und /)

Post by Guest »

Beschreibung:
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();
}
}
Problem:
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)
Hier ist ein Ausschnitt meines Testcodes:

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));
}
}
Umgebung:
  • Betriebssystem: Windows 10
  • JDK-Version: OpenJDK 21
  • Tastaturlayout: Brasilianisches ABNT2
Was ich habe Versucht:
  • 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.
Fragen:
  • 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)?
Jede Hilfe oder Einsicht wäre sehr hilfreich geschätzt. Vielen Dank im Voraus!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post