3

ヘッドレスサーバーの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 &

実際、私は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を入手する方法はありますか?

ありがとう。

4

0 に答える 0