Я хочу получить много скриншотов из Java на безголовом сервере.Для этого мой план ниже.
- Используйте Xvfb для виртуального экрана.
- Чтобы быстро сократить количество задач в очереди, откройте несколько xvfb.
- Чтобы получить скриншоты из 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?
Спасибо.