我希望模拟在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);
有帮助吗?

解决方案

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();
}

其他提示

只是继续压吗?

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

public class PressAndHold { 
    public static void main( String [] args ) throws Exception { 
        Robot robot = new Robot();
        for( int i = 0 ; i < 10; i++ ) {
            robot.keyPress( KeyEvent.VK_A );
        }
    }
}

我认为爱德华提供的答案会!

Java.lang.robot中没有键盘事件。我在计算机上尝试了此操作(在Linux下的控制台上测试,而不是在记事本上进行测试),然后产生了一串A。也许这只是记事本的问题?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top