模块  java.desktop
软件包  java.awt

Class Robot


  • public class Robot
    extends Object
    此类用于生成本机系统输入事件,以用于测试自动化,自运行演示以及需要控制鼠标和键盘的其他应用程序。 Robot的主要目的是促进Java平台实现的自动化测试。

    使用类生成输入事件不同于将事件发布到AWT事件队列或AWT组件,因为事件是在平台的本机输入队列中生成的。 例如, Robot.mouseMove实际上将移动鼠标光标而不是仅生成鼠标移动事件。

    请注意,某些平台需要特殊权限或扩展才能访问低级输入控件。 如果当前平台配置不允许输入控制,则在尝试构造Robot对象时将抛出AWTException 例如,如果X服务器不支持(或未启用)XTEST 2.2标准扩展,则X-Window系统将抛出异常。

    将Robot用于非自检的应用程序应该优雅地处理这些错误情况。

    从以下版本开始:
    1.3
    • 方法详细信息

      • mouseMove

        public void mouseMove​(int x,
                              int y)
        将鼠标指针移动到给定的屏幕坐标。
        参数
        x - X位置
        y - Y位置
      • mousePress

        public void mousePress​(int buttons)
        按下一个或多个鼠标按钮。 应使用mouseRelease(int)方法释放鼠标按钮。
        参数
        buttons - 按钮蒙版; 一个或多个鼠标按钮蒙版的组合。

        允许仅使用有效值的组合作为buttons参数。 有效的组合包括InputEvent.BUTTON1_DOWN_MASKInputEvent.BUTTON2_DOWN_MASKInputEvent.BUTTON3_DOWN_MASK由返回的和值InputEvent.getMaskForButton(button)方法。 有效组合还取决于Toolkit.areExtraMouseButtonsEnabled()值,如下所示:

        • 如果延长鼠标按钮的支持是disabled在Java那么就只允许使用下列标准按钮口罩: InputEvent.BUTTON1_DOWN_MASKInputEvent.BUTTON2_DOWN_MASKInputEvent.BUTTON3_DOWN_MASK
        • 如果Java支持扩展鼠标按钮为enabled ,则允许对现有的扩展鼠标按钮使用标准按钮蒙版和蒙版,如果鼠标有多于三个按钮的话。 以这种方式,允许使用对应于1到MouseInfo.getNumberOfButtons()范围内的按钮的按钮掩码。
          建议使用InputEvent.getMaskForButton(button)方法通过其编号获取任何鼠标按钮的掩码。

        还接受以下标准按钮蒙版:

        • InputEvent.BUTTON1_MASK
        • InputEvent.BUTTON2_MASK
        • InputEvent.BUTTON3_MASK
        但是,建议使用InputEvent.BUTTON1_DOWN_MASKInputEvent.BUTTON2_DOWN_MASKInputEvent.BUTTON3_DOWN_MASK代替。 应使用扩展的_DOWN_MASK或旧的_MASK值,但这两个模型不应混合使用。
        异常
        IllegalArgumentException - 如果 buttons掩码包含额外鼠标按钮的掩码并且支持扩展鼠标按钮,则为 disabled by Java
        IllegalArgumentException - 如果 buttons掩码包含鼠标上不存在的额外鼠标按钮的掩码,并且支持扩展鼠标按钮,则为 enabled
        另请参见:
        mouseRelease(int)InputEvent.getMaskForButton(int)Toolkit.areExtraMouseButtonsEnabled()MouseInfo.getNumberOfButtons()MouseEvent
      • mouseRelease

        public void mouseRelease​(int buttons)
        释放一个或多个鼠标按钮。
        参数
        buttons - 按钮蒙版; 一个或多个鼠标按钮蒙版的组合。

        允许仅使用有效值的组合作为buttons参数。 有效的组合包括InputEvent.BUTTON1_DOWN_MASKInputEvent.BUTTON2_DOWN_MASKInputEvent.BUTTON3_DOWN_MASK由返回的和值InputEvent.getMaskForButton(button)方法。 有效组合还取决于Toolkit.areExtraMouseButtonsEnabled()值,如下所示:

        • 如果延长鼠标按钮的支持是disabled在Java那么就只允许使用下列标准按钮口罩: InputEvent.BUTTON1_DOWN_MASKInputEvent.BUTTON2_DOWN_MASKInputEvent.BUTTON3_DOWN_MASK
        • 如果Java对扩展鼠标按钮的支持是enabled ,那么如果鼠标有三个以上的按钮,则允许对现有的扩展鼠标按钮使用标准按钮掩码和掩码。 这样,允许使用对应于1到MouseInfo.getNumberOfButtons()范围内按钮的按钮掩码。
          建议使用InputEvent.getMaskForButton(button)方法通过其编号获取任何鼠标按钮的掩码。

        还接受以下标准按钮蒙版:

        • InputEvent.BUTTON1_MASK
        • InputEvent.BUTTON2_MASK
        • InputEvent.BUTTON3_MASK
        但是,建议使用InputEvent.BUTTON1_DOWN_MASKInputEvent.BUTTON2_DOWN_MASKInputEvent.BUTTON3_DOWN_MASK代替。 应使用扩展的_DOWN_MASK或旧的_MASK值,但这两个模型不应混合使用。
        异常
        IllegalArgumentException - 如果 buttons掩码包含额外鼠标按钮的掩码并且支持扩展鼠标按钮,则为 disabled by Java
        IllegalArgumentException - 如果 buttons掩码包含鼠标上不存在的额外鼠标按钮的掩码,并且支持扩展鼠标按钮,则为 enabled
        另请参见:
        mousePress(int)InputEvent.getMaskForButton(int)Toolkit.areExtraMouseButtonsEnabled()MouseInfo.getNumberOfButtons()MouseEvent
      • mouseWheel

        public void mouseWheel​(int wheelAmt)
        在装有轮子的鼠标上旋转滚轮。
        参数
        wheelAmt - 移动鼠标滚轮的“凹槽”数量负值表示向上/远离用户的移动,正值表示向下/向用户移动。
        从以下版本开始:
        1.4
      • keyPress

        public void keyPress​(int keycode)
        按下给定的键。 应使用keyRelease方法释放密钥。

        具有多个与其关联的物理键的键代码(例如, KeyEvent.VK_SHIFT可以表示左或右shift键)将映射到左键。

        参数
        keycode - 按键(例如 KeyEvent.VK_A
        异常
        IllegalArgumentException - 如果 keycode不是有效密钥
        另请参见:
        keyRelease(int)KeyEvent
      • keyRelease

        public void keyRelease​(int keycode)
        释放给定的密钥。

        具有多个与其关联的物理键的键代码(例如, KeyEvent.VK_SHIFT可以表示左或右shift键)将映射到左键。

        参数
        keycode - 发布的关键(例如 KeyEvent.VK_A
        异常
        IllegalArgumentException - 如果 keycode不是有效密钥
        另请参见:
        keyPress(int)KeyEvent
      • getPixelColor

        public Color getPixelColor​(int x,
                                   int y)
        返回给定屏幕坐标处像素的颜色。
        参数
        x - 像素的X位置
        y - 像素的Y位置
        结果
        像素的颜色
      • createMultiResolutionScreenCapture

        public MultiResolutionImage createMultiResolutionScreenCapture​(Rectangle screenRect)
        创建包含从屏幕读取的像素的图像。 此图像不包括鼠标光标。 在存在从用户空间到屏幕(设备)空间的缩放变换的情况下,可以使用该方法。 通常这意味着显示器是高分辨率屏幕,但严格地说它意味着存在这种变换的任何情况。 返回MultiResolutionImage

        对于非缩放显示, MultiResolutionImage将具有一个图像变体:

        • 具有用户指定大小的基本图像。

        对于存在缩放变换的高分辨率显示器, MultiResolutionImage将具有两种图像变体:

        • 具有用户指定大小的基本图像。 这是从屏幕缩放的。
        • 具有设备大小像素的本机设备分辨率图像

        例:

           Image nativeResImage; MultiResolutionImage mrImage = robot.createMultiResolutionScreenCapture(frame.getBounds()); List<Image> resolutionVariants = mrImage.getResolutionVariants(); if (resolutionVariants.size() > 1) { nativeResImage = resolutionVariants.get(1); } else { nativeResImage = resolutionVariants.get(0); }  
        参数
        screenRect - 用于在屏幕坐标中捕获的Rect
        结果
        捕获的图像
        异常
        IllegalArgumentException - 如果 screenRect宽度和高度不大于零
        SecurityException - 如果未授予 readDisplayPixels权限
        从以下版本开始:
        9
        另请参见:
        SecurityManager.checkPermission(java.security.Permission)AWTPermission
      • isAutoWaitForIdle

        public boolean isAutoWaitForIdle()
        返回此Robot在生成事件后是否自动调用 waitForIdle
        结果
        是否自动调用 waitForIdle
      • setAutoWaitForIdle

        public void setAutoWaitForIdle​(boolean isOn)
        设置此Robot在生成事件后是否自动调用 waitForIdle
        参数
        isOn - 是否自动调用 waitForIdle
      • getAutoDelay

        public int getAutoDelay()
        返回此Robot在生成事件后休眠的毫秒数。
        结果
        延迟持续时间,以毫秒为单位
      • setAutoDelay

        public void setAutoDelay​(int ms)
        设置此Robot在生成事件后休眠的毫秒数。
        参数
        ms - 延迟持续时间(以毫秒为单位)
        异常
        IllegalArgumentException - 如果 ms不在0到60,000毫秒之间(包括0和60,000毫秒)
      • delay

        public void delay​(int ms)
        睡觉指定的时间。 要捕获发生的任何InterruptedException ,可以使用Thread.sleep()代替。
        参数
        ms - 以毫秒为单位的睡眠时间
        异常
        IllegalArgumentException - 如果 ms不在0到60,000毫秒之间(包括0和60,000毫秒)
        另请参见:
        Thread.sleep(long)
      • waitForIdle

        public void waitForIdle()
        等待,直到处理了当前在事件队列上的所有事件。
        异常
        IllegalThreadStateException - 如果在AWT事件调度线程上调用
      • toString

        public String toString()
        返回此Robot的字符串表示形式。
        重写:
        toString在课程 Object
        结果
        字符串表示。