Привет всем!
Я работаю над Java-приложением, в котором использую Java-приложение. Класс .awt.Robot для имитации ввода с клавиатуры. Он отлично работает для большинства символов, но я сталкиваюсь с проблемой при попытке ввести специальные символы, такие как : и /.
Вот метод, который я использую для обработки специальных символов:
Код: Выделить всё
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();
}
}
Когда я пытаюсь ввести : или /, я сталкиваюсь со следующим исключением:
Код: Выделить всё
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)
Код: Выделить всё
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));
}
}
- ОС: Windows 10
- Версия JDK: OpenJDK 21
- Раскладка клавиатуры: бразильская ABNT2
- Проверены константы KeyEvent.VK_* для : и /.
- Использованы комбинации Shift для : и других специальных символов.
- Подтверждено раскладка клавиатуры правильная.
- Пробовал альтернативные подходы, например жесткое кодирование кодов клавиш.
- Почему java.awt.Robot выдает исключение «Неверный код клавиши» для этих символов?
- Есть ли более надежный способ обработки ввода специальных символов с помощью Robot на другой клавиатуре раскладки?
- Может ли это быть проблемой, связанной с раскладкой (например, бразильская клавиатура ABNT2 или американская клавиатура)?
Подробнее здесь: https://stackoverflow.com/questions/793 ... rs-e-g-and