10

我正在尝试使用Robot类在我的 JavaFX 应用程序中捕获屏幕截图,

这是我在我的应用程序中使用的代码:

Rectangle screenBounds = new Rectangle(Screen.getPrimary().getBounds().getWidth(),
           Screen.getPrimary().getBounds().getHeight());

Robot robot = new Robot();

BufferedImage img = robot.createScreenCapture(new java.awt.Rectangle(
     (int) screenBounds.getX(), (int) screenBounds.getY(), (int) 
             screenBounds.getWidth(), (int) screenBounds.getHeight()));

它在windows 操作系统headless environment中运行良好,但在MAC OS中显示错误Robot robot = new Robot();

4

3 回答 3

28

这是在搜索了许多资源后回答我自己的问题。

我已使用以下代码禁用无头环境,问题已解决。

static {

        System.setProperty("java.awt.headless", "false");
}

谢谢。

于 2012-11-26T06:03:29.150 回答
3

从他们的 API 我可以看到以下内容:

  1. 如果工具包实现不支持显示器、键盘和鼠标,Applet 和所有重量级组件 (*) 的构造函数将更改为抛出HeadlessException
  2. 如果工具包实现不支持显示器、键盘和鼠标,Robot 构造函数将引发AWTException
  3. Toolkit 和 GraphicsEnvironment 中的许多方法(字体、图像和打印除外)都更改为 在不支持显示器、键盘和鼠标时抛出HeadlessException
  4. 其他可能因缺少显示、键盘或鼠标支持而受到影响的方法被更改为抛出HeadlessException
  5. 值得注意的是,当且仅当 isHeadless 返回 true 时才会抛出HeadlessException,并且所有 javadoc 注释都应指定这一点

因此,您需要检查您的硬件及其驱动程序。

于 2012-11-21T07:19:26.360 回答
0

您可以简单地System.setProperty("java.awt.headless", "false");Robot robot = new Robot();.

于 2021-05-04T07:38:23.757 回答