Keyevent对Ubuntu的无限召唤

时间:2013-06-13 06:50:45

标签: java awt ubuntu-12.04 keyevent awtrobot

我需要在主机上创建关键事件。 所以,我做了一个简单的java代码。

import java.awt.event.KeyEvent;
import java.awt.Robot;
import java.io.IOException;
public class Hello {
    public static void main(String[] args) throws IOException {
    try {
        try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
        Robot robot = new Robot();
        robot.keyPress(KeyEvent.VK_F11);
    } catch (Exception e) {
        e.printStackTrace();
    }
    }
}

当我使用Eclipse在Windows上执行此代码时,keyevent的{​​{1}}仅在5秒后触发一次。 但是,当我使用F11或命令(Ubuntu(12.04)Eclipse)在javac上执行此操作时, java似乎是不断触发的。 (似乎进入无限循环) Java版本为keyevent

我不知道为什么会这样。有人知道这方面的解决方案吗?

2 个答案:

答案 0 :(得分:3)

您还需要释放密钥(以模拟密钥类型)...

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_F11);
Thread.sleep(250);    
robot.keyRelease(KeyEvent.VK_F11);

其他方面,系统会认为你按住了键......

ps-我发现添加一个小延迟有助于改善整体功能。您可以直接在Robot中设置自动延迟。有关详细信息,请参阅Robot#setAutoDelay

答案 1 :(得分:1)

如上所述in the JavaDoc,您必须在按下后“释放”该键:

robot.keyPress(KeyEvent.VK_F11);
robot.keyRelease(KeyEvent.VK_F11);

在你释放它之前它仍然是“按下”。