- 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 方法 描述 MultiResolutionImage
createMultiResolutionScreenCapture(Rectangle screenRect)
创建包含从屏幕读取的像素的图像。BufferedImage
createScreenCapture(Rectangle screenRect)
创建包含从屏幕读取的像素的图像。void
delay(int ms)
睡在指定的时间。int
getAutoDelay()
返回此机器人在生成事件后休眠的毫秒数。Color
getPixelColor(int x, int y)
返回给定屏幕坐标处的像素颜色。boolean
isAutoWaitForIdle()
返回此机器人是否在生成事件后自动调用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)
设置机器人在生成事件后睡眠的毫秒数。void
setAutoWaitForIdle(boolean isOn)
设置此机器人是否在生成事件后自动调用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方法的坐标如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事件调度线程上调用
-
-