java.awt.Robot 是 Java 提供的底层输入模拟工具,可绕过组件限制直接向系统发送鼠标键盘事件,适用于轻量自动化,但需处理权限、坐标依赖和跨平台差异。

java.awt.Robot 是 Java 提供的底层输入模拟工具,能绕过 Swing/AWT 组件限制,直接向操作系统发送鼠标和键盘事件。它适合做轻量级自动化(如 UI 测试辅助、重复操作脚本),但需注意权限、屏幕坐标依赖和跨平台差异。
基础准备:开启 Robot 实例与权限检查
Robot 构造可能抛出 AWTException(例如系统不支持或无权访问输入设备):
- 在 Windows/macOS/Linux 上运行前,确保程序有“辅助功能”或“无障碍权限”(macOS 尤其需手动授权)
- 用 try-catch 包裹初始化,避免静默失败:
模拟鼠标点击:定位 + 按下 + 释放
Robot 不自动移动光标,需先调用 mouseMove(x, y) 定位,再组合按下/释放实现单击:
- 获取目标坐标:可用截图工具或 MouseInfo.getPointerInfo().getLocation() 手动记录关键位置(如按钮左上角)
- 单击示例(点击坐标 (500, 300)):
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
双击只需连续两次 press+release,中间加 robot.delay(50) 避免被识别为拖拽。
立即学习“Java免费学习笔记(深入)”;
模拟键盘录入:键码与字符输入
Robot 使用 KeyEvent 的虚拟键码(如 VK_A、VK_ENTER),不直接处理 Unicode 字符:
- 输入字母/数字:调用 keyPress() 和 keyRelease()(必须成对,否则按键卡住)
- 组合键(如 Ctrl+C):先 press 修饰键,再 press 功能键,最后按顺序 release
- 输入中文等非 ASCII 字符:Robot 无法直接模拟;可先复制到剪贴板,再用 Robot 模拟 Ctrl+V
for (char c : "Hello".toCharArray()) {
int keyCode = KeyEvent.getExtendedKeyCodeForChar(c);
if (keyCode != KeyEvent.VK_UNDEFINED) {
robot.keyPress(keyCode);
robot.keyRelease(keyCode);
}
}
// 粘贴剪贴板内容(需提前设置 SystemClipboard)
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
实用技巧与避坑提醒
- 加入 robot.delay(ms) 控制节奏(默认无延迟,太快易被系统忽略)
- 多显示器环境需注意坐标原点:Robot 默认以主屏左上角为 (0,0),跨屏操作前用 GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices() 获取各屏边界
- 避免在远程桌面或某些沙盒环境(如 Docker 桌面版)中使用,因缺少真实图形上下文
- 调试时先用 robot.mouseMove() 划线或闪烁窗口,确认坐标系是否符合预期
不复杂但容易忽略。



















