Установка Java awt.headless=true программно

Я пытаюсь установить java.awt.headless=true во время запуска приложения, но это появляется как, я слишком опаздываю, и небездисплейный режим уже запустился:

static {
    System.setProperty("java.awt.headless", "true");
    /* java.awt.GraphicsEnvironment.isHeadless() returns false */
}

Есть ли другой дорожный набор, бездисплейный к истинному около -Djava.awt.headless=true? Я предпочел бы не, настраивают что-либо на консоли.

33
задан Kasun Siyambalapitiya 10 November 2017 в 06:29
поделиться

2 ответа

Я работал с main () в классе, который статически загружает разные части JFreeChart в константах (и другом статическом коде).

Перемещение блока статической загрузки в начало класса решило мою проблему.

Это не работает:

  public class Foo() {
    private static final Color COLOR_BACKGROUND = Color.WHITE;

    static { /* too late ! */
      System.setProperty("java.awt.headless", "true");
      System.out.println(java.awt.GraphicsEnvironment.isHeadless());
      /* ---> prints false */
    }

    public static void main() {}
  }

Пусть java выполнит статический блок как можно раньше, переместив его в начало класса!

  public class Foo() {
    static { /* works fine! ! */
      System.setProperty("java.awt.headless", "true");
      System.out.println(java.awt.GraphicsEnvironment.isHeadless());
      /* ---> prints true */
    }

    private static final Color COLOR_BACKGROUND = Color.WHITE;

    public static void main() {}
  }

Если подумать, это имеет смысл :). Джуху!

39
ответ дан 27 November 2019 в 18:28
поделиться

Это должно работать, потому что вызов System.setProperty происходит до создания набора инструментов:

public static void main(String[] args)
{
    // Set system property.
    // Call this BEFORE the toolkit has been initialized, that is,
    // before Toolkit.getDefaultToolkit() has been called.
    System.setProperty("java.awt.headless", "true");

    // This triggers creation of the toolkit.
    // Because java.awt.headless property is set to true, this 
    // will be an instance of headless toolkit.
    Toolkit tk = Toolkit.getDefaultToolkit();

    // Check whether the application is
    // running in headless mode.
    GraphicsEnvironment ge = 
        GraphicsEnvironment.getLocalGraphicsEnvironment();
    System.out.println("Headless mode: " + ge.isHeadless());
}
4
ответ дан 27 November 2019 в 18:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: