当前位置: 首页 > 面试题库 >

模拟用Java按下的键

顾兴昌
2023-03-14
问题内容

我正在寻找模拟在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();
}


 类似资料:
  • 函数名称:模拟按下返回键 函数功能: 点击一次返回键 函数方法 keycode.back() 注意事项 部分设备可能会出现无效的问题,已知模拟器调用此命令可能会失效。 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

  • 我使用Arduino Uno通过USB或蓝牙将(正版)SNES控制器连接到计算机上。 Arduino使用snespad库捕获控制器的按钮按下和释放。它将按钮按下和释放作为字符进行通信(例如按下A的“a”,释放“A”的“A”)。接下来,一个Java程序使用rxtx库监听串行输出。最后,一个Java机器人使用keyPress和keyRelise模拟按键。 不幸的是,这种方法有一些缺点。主要问题是密钥映

  • 问题内容: 使用jQuery,如何在单击链接时模拟(触发?)KeyPress?例如,当用户单击以下链接时: 然后,通过单击链接,就好像他们按下了键盘上的“空格键”一样。 像这样,我假设: 关于如何实现这一目标的任何想法? 问题答案: jQuery的keypress事件旨在完成这种工作。您可以通过将字符串“keypress”传递给.trigger()来触发事件。但是,更具体地说,您实际上也可以传递j

  • 函数名称:模拟按下 home 键 函数功能: 点击一次 home 键 函数方法 keycode.home() 注意事项 部分设备可能会出现无效的问题,已知模拟器调用此命令可能会失效。 目前积木编程函数和触动精灵函数不通用,请仔细查看本手册,此手册中函数仅支持积木编程,不支持触动精灵,同理请勿将触动精灵函数在积木编程运行。

  • 问题内容: 我正在寻找一种在OSX中模拟击键的方法。我发现了使用Objective-C的另一种解决方案针对系统范围的热键模拟按键,但是我需要使用Swift来实现。如何适应CGEventCreateKeyboardEvent? 问题答案: 链接答案上的代码可以很容易地转换为Swift代码,但是在此过程中您需要注意一些技巧: 接受a ,这是a的类型别名,但是诸如的常量被定义为as ,因此您必须将它们强

  • 问题内容: 如何以编程方式模拟Droid上的按键?我想模仿一个手动按键(在机器人上显示有人正在按某个按键,但是这是通过编程方式完成的)。 有涉及的解决方案,但是在新的SDK中已经不再是选择。 问题答案: 您可以使用检测,即,从活动的onCreate调用的以下代码将导致菜单多次打开和关闭: …但是我不确定这是否是你所追求的