MacOS系统下AWT Robot调用截图接口仅返回桌面背景无法截取全屏如何解决
问题原因
这个问题是MacOS系统的权限管控机制导致的,和你写的代码逻辑无关。从MacOS 10.14 Mojave版本开始,系统对所有应用的屏幕录制类操作做了权限限制,没有获得屏幕录制权限的应用调用截图接口时,只能捕获到桌面背景内容,无法获取其他打开的应用窗口、系统菜单栏等画面。
解决方法
- 给运行Java程序的载体授予屏幕录制权限:
- 如果你是在Intellij IDEA中直接运行测试代码,打开【系统设置】→【隐私与安全性】→【屏幕录制】,在权限列表中找到Intellij IDEA,打开右侧的权限开关,重启IDEA后再运行代码即可正常截图。
- 如果你是将程序打包为jar包在终端运行,给对应的终端工具(系统自带Terminal或iTerm2等第三方终端)开启上述屏幕录制权限,重启终端后再运行程序即可。
- 多屏适配优化(可选):当前代码默认只捕获主屏幕内容,如果你有多块外接屏幕,可以通过
GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()遍历所有显示设备,分别截图后拼接,即可实现多屏完整内容截取。 - 适配问题排查:如果权限开启后仍无法正常截图,建议将JDK升级到11及以上的LTS版本,老版本OpenJDK对MacOS的Robot接口适配存在已知缺陷,升级后可解决大部分兼容性问题。
内容的提问来源于stack exchange,提问作者brevleq
相关产品推荐
相关产品推荐

