AWT Robot - 仅在 MacOS 上截取当前程序的屏幕截图
Posted
技术标签:
【中文标题】AWT Robot - 仅在 MacOS 上截取当前程序的屏幕截图【英文标题】:AWT Robot - only taking screenshot of current program on MacOS 【发布时间】:2021-12-07 09:23:44 【问题描述】:我正在创建一个简单的测试程序来截取整个屏幕,经过一些研究,我创建了以下代码:
public class PrintScreenCatcher
public String capture()
try
Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
Robot robot = new Robot();
BufferedImage screenShot = robot.createScreenCapture(rectangle);
File file=createTempFilePath();
ImageIO.write(screenShot, "jpg", file);
return file.getAbsolutePath();
catch (Exception e)
e.printStackTrace();
return null;
private File createTempFilePath() throws IOException
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyyMMddHHmmssS");
return File.createTempFile("screen-"+LocalDateTime.now().format(formatter),".jpg");
运行此程序后,我期待一个带有整个屏幕的图像(MacOS 菜单、Intellij 等):
我得到了一张只包含我桌面背景的图片:
我认为机器人试图只截取我的程序的屏幕截图。我应该怎么做才能对打开的屏幕进行截图?
【问题讨论】:
你是如何运行你的代码的?主要方法在哪里? @GilbertLeBlanc 我正在通过 junit 运行它 【参考方案1】:问题在于 MacOS 权限。根据这个answer,程序需要权限才能录屏。我只是在 System Preferences -> Security and Privacy -> Privacy -> Screen Recording 中添加了对 IntelliJ 的访问权限,它就起作用了。
【讨论】:
【参考方案2】:我添加了一个 main 方法,并在 Windows 10 上使用 Java 14.0.2 捕获了以下图像,代码编译为 Java 8 标准。
这是我运行的代码。如果你在 Mac 上仍然出现黑屏,那我帮不了你。
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import javax.imageio.ImageIO;
public class PrintScreenCatcher
public static void main(String[] args)
System.out.println(new PrintScreenCatcher().capture());
public String capture()
try
Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
Robot robot = new Robot();
BufferedImage screenShot = robot.createScreenCapture(rectangle);
File file = createTempFilePath();
ImageIO.write(screenShot, "jpg", file);
return file.getAbsolutePath();
catch (Exception e)
e.printStackTrace();
return null;
private File createTempFilePath() throws IOException
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssS");
return File.createTempFile("screen-" + LocalDateTime.now().format(formatter), ".jpg");
【讨论】:
以上是关于AWT Robot - 仅在 MacOS 上截取当前程序的屏幕截图的主要内容,如果未能解决你的问题,请参考以下文章
java.awt.AWTException:java.awt.Robot.(Robot.java:94) 的无头环境 [重复]