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

我试图使用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操作系统中运行良好 ,但在Robot robot = new Robot(); MAC OS中显示headless environment的错误Robot robot = new Robot();

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

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

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

谢谢。

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

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

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