Я пытаюсь установить java.awt.headless=true
во время запуска приложения, но это появляется как, я слишком опаздываю, и небездисплейный режим уже запустился:
static {
System.setProperty("java.awt.headless", "true");
/* java.awt.GraphicsEnvironment.isHeadless() returns false */
}
Есть ли другой дорожный набор, бездисплейный к истинному около -Djava.awt.headless=true
? Я предпочел бы не, настраивают что-либо на консоли.
Я работал с 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() {}
}
Если подумать, это имеет смысл :). Джуху!
Это должно работать, потому что вызов 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());
}