我想使用Java Robot键入:
。但是,我得到了IllegalArgumentException
。我的代码是:
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_COLON);
robot.keyRelease(KeyEvent.VK_COLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
例外是:
java.lang.IllegalArgumentException: Invalid key code.].
我也尝试过:
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
我该如何解决这个问题?
答案 0 :(得分:15)
尝试使用此代码:
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
与您输入的键盘一样:当您按shift +;时。你需要模拟它。
尝试运行此代码只是为了尝试哪种方法可以正常使用以上答案:
public class Test {
public static void main(String[] args) {
Robot robot;
try {
robot = new Robot();
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
} catch (AWTException e) {
// TODO Auto-generated catch bloc
e.printStackTrace();
}
}
}
答案 1 :(得分:4)
不幸的是,Java Robot
类依赖于一个名为java.awt.peer.RobotPeer
的未记录接口的特定于平台的实现。特定于平台的实施决定了哪些关键新闻事件是合法的或非法的。
在我的Windows XP框中,这样可以正常工作:
public static void main(final String[] args) throws InterruptedException, IOException {
Robot robot;
try {
robot = new Robot();
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
} catch (final AWTException e) {
// TODO Auto-generated catch bloc
e.printStackTrace();
}
}
在不同的平台上,您可能需要尝试:
public static void main(final String[] args) throws InterruptedException, IOException {
Robot robot;
try {
robot = new Robot();
robot.keyPress(KeyEvent.VK_COLON);
robot.keyRelease(KeyEvent.VK_COLON);
} catch (final AWTException e) {
// TODO Auto-generated catch bloc
e.printStackTrace();
}
}
答案 2 :(得分:2)
试试这段代码;),也许有帮助(使用ascii代码alt + 5 + 8 = :):
robot9.delay(20);
robot9.keyPress(KeyEvent.VK_ALT);
robot9.delay(20);
robot9.keyPress(KeyEvent.VK_NUMPAD5);
robot9.keyRelease(KeyEvent.VK_NUMPAD5);
robot9.delay(20);
robot9.keyPress(KeyEvent.VK_NUMPAD8);
robot9.keyRelease(KeyEvent.VK_NUMPAD8);
robot9.delay(20);
robot9.keyRelease(KeyEvent.VK_ALT);
robot9.delay(20);
答案 3 :(得分:1)
这似乎也取决于语言。在德语键盘上,使用VK_SHIFT
和VK_PERIOD
的组合工作。
答案 4 :(得分:0)
我不了解Java机器人,但是如果你使用shift,那么你不应该输入分号,因为shift +分号=冒号。所以它可能是一个非法的论点,因为冒号不是关键,分号是。
答案 5 :(得分:0)
试用此代码
case KeyEvent.VK_SEMICOLON:
if((event.getModifiers() & KeyEvent.KEY_PRESSED)!=0)
System.out.println(":");
else
System.out.print(";");
break;
答案 6 :(得分:0)
有人构建了一个KeyboardKeys类,并在此处将其发布。它位于https://stackoverflow.com/a/20979488/7069565。简而言之,他将每个字符键入为Alt + Number组合。
答案 7 :(得分:0)
分号是一个“upercase leter”,也就是说,你只能使用Keys的组合
移+昏迷
试试这个:
robot = new Robot();
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_COMMA);
//Since you have the Shift pressed it will generate a semi colon.
robot.keyRelease(KeyEvent.VK_COMMA);
robot.keyRelease(KeyEvent.VK_SHIFT);
我希望我有所帮助。
祝你有个愉快的一天。 :)