- 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。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 MultiResolutionImage
createMultiResolutionScreenCapture(Rectangle screenRect)
创建包含从屏幕读取的像素的图像。BufferedImage
createScreenCapture(Rectangle screenRect)
创建包含从屏幕读取的像素的图像。void
delay(int ms)
睡觉指定的时间。int
getAutoDelay()
返回此Robot在生成事件后休眠的毫秒数。Color
getPixelColor(int x, int y)
返回给定屏幕坐标处像素的颜色。boolean
isAutoWaitForIdle()
返回此Robot在生成事件后是否自动调用waitForIdle
。void
keyPress(int keycode)
按下给定的键。void
keyRelease(int keycode)
释放给定的密钥。void
mouseMove(int x, int y)
将鼠标指针移动到给定的屏幕坐标。void
mousePress(int buttons)
按下一个或多个鼠标按钮。void
mouseRelease(int buttons)
释放一个或多个鼠标按钮。void
mouseWheel(int wheelAmt)
在装有轮子的鼠标上旋转滚轮。void
setAutoDelay(int ms)
设置此Robot在生成事件后休眠的毫秒数。void
setAutoWaitForIdle(boolean isOn)
设置此Robot在生成事件后是否自动调用waitForIdle
。String
toString()
返回此Robot的字符串表示形式。void
waitForIdle()
等待,直到处理了当前在事件队列上的所有事件。
-
-
-
构造方法详细信息
-
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
掩码包含额外鼠标按钮的掩码并且支持扩展鼠标按钮,则为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_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
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位置 - 结果
- 像素的颜色
-
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事件调度线程上调用
-
-