- java.lang.Object
-
- java.awt.Robot
-
public class Robot extends Object
此类用于生成本机系统输入事件,以用于测试自动化,自运行演示以及需要控制鼠标和键盘的其他应用程序。 Robot的主要目的是促进Java平台实现的自动化测试。使用类生成输入事件不同于将事件发布到AWT事件队列或AWT组件,因为事件是在平台的本机输入队列中生成的。 例如,
Robot.mouseMove实际上将移动鼠标光标而不是仅生成鼠标移动事件。请注意,某些平台需要特殊权限或扩展才能访问低级输入控件。 如果当前平台配置不允许输入控制,则在尝试构造Robot对象时将抛出
AWTException。 例如,如果X服务器不支持(或未启用)XTEST 2.2标准扩展,则X-Window系统将抛出异常。将Robot用于非自检的应用程序应该优雅地处理这些错误情况。
- 从以下版本开始:
- 1.3
-
-
构造方法摘要
构造方法 构造器 描述 Robot()在主屏幕的坐标系中构造Robot对象。Robot(GraphicsDevice screen)为给定的屏幕设备创建一个Robot。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 MultiResolutionImagecreateMultiResolutionScreenCapture(Rectangle screenRect)创建包含从屏幕读取的像素的图像。BufferedImagecreateScreenCapture(Rectangle screenRect)创建包含从屏幕读取的像素的图像。voiddelay(int ms)睡觉指定的时间。intgetAutoDelay()返回此Robot在生成事件后休眠的毫秒数。ColorgetPixelColor(int x, int y)返回给定屏幕坐标处像素的颜色。booleanisAutoWaitForIdle()返回此Robot在生成事件后是否自动调用waitForIdle。voidkeyPress(int keycode)按下给定的键。voidkeyRelease(int keycode)释放给定的密钥。voidmouseMove(int x, int y)将鼠标指针移动到给定的屏幕坐标。voidmousePress(int buttons)按下一个或多个鼠标按钮。voidmouseRelease(int buttons)释放一个或多个鼠标按钮。voidmouseWheel(int wheelAmt)在装有轮子的鼠标上旋转滚轮。voidsetAutoDelay(int ms)设置此Robot在生成事件后休眠的毫秒数。voidsetAutoWaitForIdle(boolean isOn)设置此Robot在生成事件后是否自动调用waitForIdle。StringtoString()返回此Robot的字符串表示形式。voidwaitForIdle()等待,直到处理了当前在事件队列上的所有事件。
-
-
-
构造方法详细信息
-
Robot
public Robot() throws AWTException在主屏幕的坐标系中构造Robot对象。- 异常
-
AWTException- 如果平台配置不允许低级输入控制。 当GraphicsEnvironment.isHeadless()返回true时,总是抛出此异常 -
SecurityException- 如果未授予createRobot权限 - 另请参见:
-
GraphicsEnvironment.isHeadless(),SecurityManager.checkPermission(java.security.Permission),AWTPermission
-
Robot
public Robot(GraphicsDevice screen) throws AWTException
为给定的屏幕设备创建一个Robot。 传递给Robot方法调用的坐标(如mouseMove,getPixelColor和createScreenCapture)将被解释为与指定屏幕位于同一坐标系中。 请注意,根据平台配置,多个屏幕可能是:- 共享相同的坐标系以形成组合的虚拟屏幕
- 使用不同的坐标系统作为独立的屏幕
如果重新配置屏幕设备以使坐标系受到影响,则现有Robot对象的行为是不确定的。
- 参数
-
screen- 一个屏幕GraphicsDevice,指示机器人将在其中运行的坐标系。 - 异常
-
AWTException- 如果平台配置不允许低级输入控制。 当GraphicsEnvironment.isHeadless()返回true时,总是抛出此异常。 -
IllegalArgumentException- 如果screen不是屏幕GraphicsDevice。 -
SecurityException- 如果未授予createRobot权限 - 另请参见:
-
GraphicsEnvironment.isHeadless(),GraphicsDevice,SecurityManager.checkPermission(java.security.Permission),AWTPermission
-
-
方法详细信息
-
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_MASK,InputEvent.BUTTON2_DOWN_MASK,InputEvent.BUTTON3_DOWN_MASK由返回的和值InputEvent.getMaskForButton(button)方法。 有效组合还取决于Toolkit.areExtraMouseButtonsEnabled()值,如下所示:- 如果延长鼠标按钮的支持是
disabled在Java那么就只允许使用下列标准按钮口罩:InputEvent.BUTTON1_DOWN_MASK,InputEvent.BUTTON2_DOWN_MASK,InputEvent.BUTTON3_DOWN_MASK。 - 如果Java支持扩展鼠标按钮为
enabled,则允许对现有的扩展鼠标按钮使用标准按钮蒙版和蒙版,如果鼠标有多于三个按钮的话。 以这种方式,允许使用对应于1到MouseInfo.getNumberOfButtons()范围内的按钮的按钮掩码。
建议使用InputEvent.getMaskForButton(button)方法通过其编号获取任何鼠标按钮的掩码。
还接受以下标准按钮蒙版:
-
InputEvent.BUTTON1_MASK -
InputEvent.BUTTON2_MASK -
InputEvent.BUTTON3_MASK
InputEvent.BUTTON1_DOWN_MASK,InputEvent.BUTTON2_DOWN_MASK,InputEvent.BUTTON3_DOWN_MASK代替。 应使用扩展的_DOWN_MASK或旧的_MASK值,但这两个模型不应混合使用。 - 如果延长鼠标按钮的支持是
- 异常
-
IllegalArgumentException- 如果buttons掩码包含额外鼠标按钮的掩码并且支持扩展鼠标按钮,则为disabledby 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_MASK,InputEvent.BUTTON2_DOWN_MASK,InputEvent.BUTTON3_DOWN_MASK由返回的和值InputEvent.getMaskForButton(button)方法。 有效组合还取决于Toolkit.areExtraMouseButtonsEnabled()值,如下所示:- 如果延长鼠标按钮的支持是
disabled在Java那么就只允许使用下列标准按钮口罩:InputEvent.BUTTON1_DOWN_MASK,InputEvent.BUTTON2_DOWN_MASK,InputEvent.BUTTON3_DOWN_MASK。 - 如果Java对扩展鼠标按钮的支持是
enabled,那么如果鼠标有三个以上的按钮,则允许对现有的扩展鼠标按钮使用标准按钮掩码和掩码。 这样,允许使用对应于1到MouseInfo.getNumberOfButtons()范围内按钮的按钮掩码。
建议使用InputEvent.getMaskForButton(button)方法通过其编号获取任何鼠标按钮的掩码。
还接受以下标准按钮蒙版:
-
InputEvent.BUTTON1_MASK -
InputEvent.BUTTON2_MASK -
InputEvent.BUTTON3_MASK
InputEvent.BUTTON1_DOWN_MASK,InputEvent.BUTTON2_DOWN_MASK,InputEvent.BUTTON3_DOWN_MASK代替。 应使用扩展的_DOWN_MASK或旧的_MASK值,但这两个模型不应混合使用。 - 如果延长鼠标按钮的支持是
- 异常
-
IllegalArgumentException- 如果buttons掩码包含额外鼠标按钮的掩码并且支持扩展鼠标按钮,则为disabledby 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位置 - 结果
- 像素的颜色
-
createScreenCapture
public BufferedImage createScreenCapture(Rectangle screenRect)
创建包含从屏幕读取的像素的图像。 此图像不包括鼠标光标。- 参数
-
screenRect- 在屏幕坐标中捕获的Rect - 结果
- 捕获的图像
- 异常
-
IllegalArgumentException- 如果screenRect宽度和高度不大于零 -
SecurityException- 如果未授予readDisplayPixels权限 - 另请参见:
-
SecurityManager.checkPermission(java.security.Permission),AWTPermission
-
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事件调度线程上调用
-
-