Как получить несколько xvfb GraphicsDevice из Java - PullRequest
3 голосов
/ 25 октября 2011

Я хочу получить много скриншотов из Java на безголовом сервере.Для этого мой план ниже.

  1. Используйте Xvfb для виртуального экрана.
  2. Чтобы быстро сократить количество задач в очереди, откройте несколько xvfb.
  3. Чтобы получить скриншоты из java, используйте java.awt.Robot#createScreenCapture.(Конструктор java.awt.Robot требует целевой java.awt.GraphicsDevice)

Проблема в том, что экранные устройства xvfb не перечислены в java.awt.GraphicsEnvironment # getScreenDevices ().

Код - это что-то вроде этого.http://www.java2s.com/Code/JavaAPI/java.awt/GraphicsEnvironmentgetScreenDevices.htm

import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;

public class MainClass {

  public static void main(String[] a) throws Exception {
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] screenDevices = ge.getScreenDevices();
    for (int i = 0; i < screenDevices.length; i++)
      System.out.println(screenDevices[i].getIDstring());
  }
}

Терминал:

% Xvfb :1 -screen 0 1024x768x24 &
% Xvfb :2 -screen 0 1024x768x24 &

На самом деле, я тестировал приведенный выше эквивалентный код из реплики Clojure для MBA (Mac OSX 10.6.8) и HP2140 (Ubuntu 10.04).

(seq (.getScreenDevices (java.awt.GraphicsEnvironment/getLocalGraphicsEnvironment))
;=> (#<CGraphicsDevice CGraphicsDevice[screen=0]>)

Я думаю, что два устройства xvfb должны быть перечислены.Есть ли способ получить xvfb GraphicsDevice?

Спасибо.

...