Java Robot类KeyEvent

时间:2014-01-25 19:29:16

标签: java class keyevent awtrobot

有没有办法写行

r.keyPress(KeyEvent.VK_SPACE);

这将允许在safari中运行的html 5游戏注册空格键按下,因为游戏内部已经发生了? (在游戏中,我的意思是让游戏做出反应,就好像“空间”被物理压迫一样)

例如,我已经意识到某些KeyEvent仅在某些元素之上注册为已触发。下面的代码将成功在safari的URL栏中注册一个空格键 - 按下事件:

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

 public class SpaceBarPress {

    SpaceBarPress(){
    }

    public static void main (String[] args) {
        try{
            Robot r = new Robot();  //create instance of robot class
            r.mouseMove(600,323); //move cursor over top URL bar

            r.mousePress(InputEvent.BUTTON1_MASK); //bring URL bar into focus
            r.mouseRelease(InputEvent.BUTTON1_MASK);

            r.keyPress(KeyEvent.VK_SPACE); //fire spacebar event
            r.keyRelease(KeyEvent.VK_SPACE);

          }
          catch(AWTException e){
              e.printStackTrace();
          }
      }
  }

然而,当在浏览器中运行的html 5游戏上运行相同的代码时,空格键事件将不会在游戏内注册。然而,按下物理空格键会对游戏产生影响。

1 个答案:

答案 0 :(得分:0)

机器人按键事件以更快的速度执行,以便应用程序处理。而是在按下和释放事件之间使用一些ms的延迟,比如40,

r.keyPress(KeyEvent.VK_SPACE); //fire spacebar event
r.delay(40);
r.keyRelease(KeyEvent.VK_SPACE);