2

当您尝试使用 Robot.keyPress 键入"(双引号)时,它会抛出 java.lang.IllegalArgumentException: Invalid key code。

我该如何解决或解决这个问题?

如果有帮助,我目前在 Windows 上。

测试代码:

import java.awt.Robot;
import java.awt.event.KeyEvent;

public class Test {
    public static void main(String[] args) throws Exception {
        Robot robot = new Robot();
        try {
            robot.keyPress(KeyEvent.VK_QUOTEDBL);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

例外:

java.lang.IllegalArgumentException: Invalid key code
    at sun.awt.windows.WRobotPeer.keyPress(Native Method)
    at java.awt.Robot.keyPress(Robot.java:358)
4

1 回答 1

6

我认为您遇到错误是因为"键盘上没有键。 "几乎可以肯定会在键盘的一个键上,但它很可能会被转移。而不是尝试 'press' ",您应该 'press' Shift 和该键的 'base' 字符,即如果您自己键入该键,您会得到一个。

我发现在命令提示符下运行以下类给我留下了一个"字符:

import java.awt.Robot;
import java.awt.event.KeyEvent;

public class Test {
    public static void main(String[] args) throws Exception {
        Robot robot = new Robot();
        try {
            robot.keyPress(KeyEvent.VK_SHIFT);
            robot.keyPress(KeyEvent.VK_2);
            robot.keyRelease(KeyEvent.VK_SHIFT);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在英国键盘(我正在使用)上,"字符被移位2,这就是我使用KeyEvent.VK_2. 它可能在其他键盘上的其他地方——如果我没记错的话,它在美式键盘上是单引号。在这种情况下,您将使用VK_QUOTE而不是VK_2.

我还发现释放VK_SHIFT按键是必要的,以避免 Windows 认为 Shift 键仍被按住时出现的各种奇怪现象。

于 2012-08-12T15:13:12.493 回答