模拟用Java按下的键

Ros*_*oss 4 java awt keypress keyevent

我正在寻找模拟在Java中短按键盘键的动作。我希望下面的代码按住A键5秒钟,但是只按一次它(在记事本中测试时会产生一个“ a”)。我是否需要使用其他东西,或者我在这里使用awt.Robot类错了吗?

Robot robot = null; 
robot = new Robot();
robot.keyPress(KeyEvent.VK_A);
Thread.sleep(5000);
robot.keyRelease(KeyEvent.VK_A);
Run Code Online (Sandbox Code Playgroud)

edw*_*att 5

Thread.sleep()阻止当前线程(按住键的线程)执行。

如果您希望它在给定的时间内按住键,也许您应该在并行线程中运行它。

这是一个解决Thread.sleep()问题的建议(使用命令模式,以便您可以创建其他命令并随意交换它们):

public class Main {

public static void main(String[] args) throws InterruptedException {
    final RobotCommand pressAKeyCommand = new PressAKeyCommand();
    Thread t = new Thread(new Runnable() {

        public void run() {
            pressAKeyCommand.execute();
        }
    });
    t.start();
    Thread.sleep(5000);
    pressAKeyCommand.stop();

  }
}

class PressAKeyCommand implements RobotCommand {

private volatile boolean isContinue = true;

public void execute() {
    try {
        Robot robot = new Robot();
        while (isContinue) {
            robot.keyPress(KeyEvent.VK_A);
        }
        robot.keyRelease(KeyEvent.VK_A);
    } catch (AWTException ex) {
        // Do something with Exception
    }
}

  public void stop() {
     isContinue = false;
  }
}

interface RobotCommand {

  void execute();

  void stop();
}
Run Code Online (Sandbox Code Playgroud)