【问题标题】:java.awt.HeadlessException thrown from HeadlessGraphicsEnvironment.getDefaultScreenDevice从 HeadlessGraphicsEnvironment.getDefaultScreenDevice 抛出的 java.awt.HeadlessException
【发布时间】:2010-12-27 00:16:37
【问题描述】:

我需要在 java 服务器上进行一些图像处理(Debian 的 java 版本为“1.6.0_12”), 我从我的代码中收到 java.awt.HeadlessException:

java.awt.HeadlessException
    at sun.java2d.HeadlessGraphicsEnvironment.getDefaultScreenDevice(HeadlessGraphicsEnvironment.java:64)
    at WaxOn.getDefaultConfiguration(WaxOn.java:341)

即使将 java.awt.headless 设置为 true(如此代码打印所示):

if (!java.awt.GraphicsEnvironment.isHeadless())
{
    logger.warn("Headless mode is not enabled");
}
else
{
    logger.info("Headless mode");
}

这是引发异常的代码:

public static GraphicsConfiguration getDefaultConfiguration()
{
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice gd = ge.getDefaultScreenDevice();
    return gd.getDefaultConfiguration();
}

知道如何解决这个问题吗?

【问题讨论】:

    标签: java awt headless


    【解决方案1】:

    无头时您没有屏幕设备。 documentation is clear

    抛出: HeadlessException - 如果 isHeadless() 返回 true

    【讨论】:

    • 当 isHeadless 为 false 时,jvm 会尝试连接到 X 服务器。无头模式应该支持一些没有 X 服务器的操作。
    • 这个也很清楚:java.sun.com/products/java-media/2D/reference/faqs/index.html,在那个文档里找'headless'。
    • 好的。如何在 Java 中没有(天哪,这很愚蠢)x 服务器执行双三次图像调整大小?
    • 该方法的文档说如果在无头模式下它必须抛出异常。因此,仅此而已 - 这是不可能的。如果您觉得这是错误的,您可以在 oracle 错误跟踪系统中创建一个问题。
    • @Omry - 这是另一个问题 - 请随意提出新问题;)
    【解决方案2】:

    您的代码似乎在没有可用图形设备的机器上获取默认图形设备配置。这没有多大意义,而且永远不会起作用。

    如果您能解释为什么要尝试这样做(在无头机器上),我们或许可以提供替代方案。

    【讨论】:

    • 我正在尝试调整图像大小和裁剪图像。在没有 X 服务器的情况下能够做到这一点非常有意义。
    • 顺便说一句:有一个名为 HeadlessGraphicsEnvironment 的类(参见堆栈跟踪)这一事实表明这很有可能会真正起作用。
    猜你喜欢
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2015-01-16
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多