ヘッドレスサーバーの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 &
実際、私はMBA(Mac OSX 10.6.8)とHP2140(Ubuntu 10.04)でClojureの担当者からの上記の同等のコードをテストしました。
(seq (.getScreenDevices (java.awt.GraphicsEnvironment/getLocalGraphicsEnvironment))
;=> (#<CGraphicsDevice CGraphicsDevice[screen=0]>)
2つのxvfbデバイスをリストする必要があると思います。xvfb GraphicsDeviceを入手する方法はありますか?
ありがとう。