当您尝试使用Robot.keyPress键入"
(双引号)时,它会抛出java.lang.IllegalArgumentException:无效的密钥代码。
我该如何解决或解决这个问题?
如果有帮助,我目前在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)
答案 0 :(得分:5)
我认为您收到错误是因为键盘上没有"
键。 "
几乎肯定会出现在键盘上的一个按键上,但很可能会被移动。你不应该试图'按'"
,而应该'按'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键仍被按下。