Вот совершенно другой подход.
try {
Field defaultHeadlessField = java.awt.GraphicsEnvironment.class.getDeclaredField("defaultHeadless");
defaultHeadlessField.setAccessible(true);
defaultHeadlessField.set(null,Boolean.FALSE);
Field headlessField = java.awt.GraphicsEnvironment.class.getDeclaredField("headless");
headlessField.setAccessible(true);
headlessField.set(null,Boolean.TRUE);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
Я использую это успешно сделать на стороне сервера BufferedImages в обезглавленной среде (Ubuntu). Приятно то, что в командной строке не требуется устанавливать какие-либо переменные -D, и вам не нужно устанавливать переменную DISPLAY.
Вы также можете выполнить этот код в любое время. Вам не нужно беспокоиться об этом, прежде чем загружать другие классы.
Я полагаю, это может не сработать, если вы пытаетесь управлять интерфейсом Swing на удаленной машине из безголовой среды.
Вы также можете быть заинтересованы в http://en.wikipedia.org/wiki/Xvfb. – lexicore