如何从java获取多个xvfb GraphicsDevice

时间:2011-10-25 18:42:05

标签: java xvfb

我想从无头服务器的java中获取很多截图。 为此,我的计划如下。

  1. 将Xvfb用于虚拟屏幕。
  2. 要快速减少队列中的任务,请打开多个xvfb。
  3. 要从java获取屏幕截图,请使用java.awt.Robot #createScreenCapture。 (java.awt.Robot的构造函数需要目标java.awt.GraphicsDevice)
  4. 问题是java.awt.GraphicsEnvironment#getScreenDevices()未列出xvfb屏幕设备。

    代码是这样的。 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?

    感谢。

0 个答案:

没有答案