- 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
-
-
构造方法摘要
构造方法 Constructor 描述 Robot()在主屏幕的坐标系中构造一个Robot对象。Robot(GraphicsDevice screen)为给定的屏幕设备创建一个机器人。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 MultiResolutionImagecreateMultiResolutionScreenCapture(Rectangle screenRect)创建包含从屏幕读取的像素的图像。BufferedImagecreateScreenCapture(Rectangle screenRect)创建包含从屏幕读取的像素的图像。voiddelay(int ms)睡在指定的时间。intgetAutoDelay()返回此机器人在生成事件后休眠的毫秒数。ColorgetPixelColor(int x, int y)返回给定屏幕坐标处的像素颜色。booleanisAutoWaitForIdle()返回此机器人是否在生成事件后自动调用waitForIdle。voidkeyPress(int keycode)按一个给定的键。voidkeyRelease(int keycode)释放给定的键voidmouseMove(int x, int y)将鼠标指针移动到给定的屏幕坐标。voidmousePress(int buttons)按一个或多个鼠标按钮。voidmouseRelease(int buttons)释放一个或多个鼠标按钮。voidmouseWheel(int wheelAmt)在装有轮子的鼠标上旋转滚轮。voidsetAutoDelay(int ms)设置机器人在生成事件后睡眠的毫秒数。voidsetAutoWaitForIdle(boolean isOn)设置此机器人是否在生成事件后自动调用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方法的坐标如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面具包含额外的鼠标按钮的掩码和支持扩展的鼠标按钮是disabled由Java -
IllegalArgumentException- 如果buttons掩码包含鼠标不存在的额外鼠标按钮的掩码,并且支持扩展鼠标按钮,则为enabled(由Java提供) - 另请参见:
-
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面具包含用于额外的鼠标按钮的掩码,并且支持扩展鼠标按钮是由disabled由Java -
IllegalArgumentException- 如果buttons蒙版包含鼠标不存在的额外的鼠标按钮的掩码,并且支持扩展鼠标按钮是由enabled由Java - 另请参见:
-
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可能意味着左移或右移键)将映射到左键。- 参数
-
keycode- 按键(例如KeyEvent.VK_A) - 异常
-
IllegalArgumentException- 如果keycode不是有效的密钥 - 另请参见:
-
keyRelease(int),KeyEvent
-
keyRelease
public void keyRelease(int keycode)
释放给定的键具有与其相关联的多个物理键的键代码(例如,
KeyEvent.VK_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- 在屏幕坐标中进行矩形捕获 - 结果
- 拍摄的图像
- 异常
-
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- 矩形捕获在屏幕坐标 - 结果
- 拍摄的图像
- 异常
-
IllegalArgumentException- 如果screenRect宽度和高度不大于零 -
SecurityException- 如果没有授予readDisplayPixels权限 - 从以下版本开始:
- 9
- 另请参见:
-
SecurityManager.checkPermission(java.security.Permission),AWTPermission
-
isAutoWaitForIdle
public boolean isAutoWaitForIdle()
返回此机器人是否在生成事件后自动调用waitForIdle。- 结果
-
是否自动调用
waitForIdle
-
setAutoWaitForIdle
public void setAutoWaitForIdle(boolean isOn)
设置此机器人是否在生成事件后自动调用waitForIdle。- 参数
-
isOn- 是否自动调用waitForIdle
-
getAutoDelay
public int getAutoDelay()
返回此机器人在生成事件后休眠的毫秒数。- 结果
- 延迟时间(以毫秒为单位)
-
setAutoDelay
public void setAutoDelay(int ms)
设置机器人在生成事件后睡眠的毫秒数。- 参数
-
ms- 以毫秒为单位的延迟持续时间 - 异常
-
IllegalArgumentException- 如果ms不在0到60,000毫秒之间
-
delay
public void delay(int ms)
睡在指定的时间。 要抓住发生的任何InterruptedException,可以使用Thread.sleep()。- 参数
-
ms- 以毫秒为单位的睡眠时间 - 异常
-
IllegalArgumentException- 如果ms不在0到60,000毫秒之间 - 另请参见:
-
Thread.sleep(long)
-
waitForIdle
public void waitForIdle()
等待直到事件队列上的所有事件都处理完毕。- 异常
-
IllegalThreadStateException- 如果在AWT事件调度线程上调用
-
-