带有MAC OS的java.awt.Robot类中的无头环境错误

时间:2012-11-21 05:38:56

标签: java macos javafx-2 headless awtrobot

我正在尝试使用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();错误

3 个答案:

答案 0 :(得分:13)

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

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

static {

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

感谢。

答案 1 :(得分:2)

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

  1. Applet和所有重量级组件(*)的构造函数 如果是显示器,键盘和鼠标,则更改为抛出 HeadlessException 工具包实现不支持
  2. 如果显示器,键盘,机器人构造函数会抛出 AWTException 工具包实现不支持鼠标和鼠标
  3. Toolkit和GraphicsEnvironment中的许多方法都带有 字体,图像和打印的例外情况被更改为抛出 HeadlessException 如果没有显示器,键盘和鼠标 支持的
  4. 可能因显示屏,键盘或屏幕不足而受影响的其他方法 鼠标支持,更改为抛出 HeadlessException
  5. 值得注意的是,如果出现 HeadlessException 并且只有isHeadless返回true,并且所有javadoc注释 应该指定这个
  6. 因此,您需要检查硬件及其驱动程序。

答案 2 :(得分:0)

您只需在 System.setProperty("java.awt.headless", "false"); 之前添加这行代码 Robot robot = new Robot();