0

私はJavaプロジェクトに取り組んでいます。さまざまなオペレーティング システムのスクリーン ショットをキャプチャする必要があります。

String outFileName = "c:\\Windows\\Temp\\screen.jpg";
 try{
    long time = Long.parseLong(secs) * 1000L;
    System.out.println("Waiting " + (time / 1000L) + " second(s)...");
    //Thread.sleep(time);
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Dimension screenSize = toolkit.getScreenSize();
    Rectangle screenRect = new Rectangle(screenSize);
    Robot robot = new Robot();
    BufferedImage image = robot.createScreenCapture(screenRect);
    ImageIO.write(image, "jpg", new File(outFileName));
  }catch(Exception screen){}

上記のコードを使用すると、Windows XP からスクリーン ショットがキャプチャされますが、他のオペレーティング システムではキャプチャされません。すべてのオペレーティング システムで動作させるために維持する必要がある他の方法はありますか?

4

1 に答える 1

2

これは、私たちが使用するいくつかのコードの非常に骨抜きにされたバージョンです...

try {

    Robot robot = new Robot();

    GraphicsDevice[] screenDevices = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();
    Area area = new Area();
    for (GraphicsDevice gd : screenDevices) {
        area.add(new Area(gd.getDefaultConfiguration().getBounds()));
    }

    Rectangle bounds = area.getBounds();
    System.out.println(bounds);
    BufferedImage img = new BufferedImage(bounds.width, bounds.height, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = img.createGraphics();
    for (GraphicsDevice gd : screenDevices) {
        Rectangle screenBounds = gd.getDefaultConfiguration().getBounds();
        BufferedImage screenCapture = robot.createScreenCapture(screenBounds);
        g2d.drawImage(screenCapture, screenBounds.x, screenBounds.y, null);
    }

    g2d.dispose();
    ImageIO.write(img, "png", new File("path/to/ScreenShot.png"));

} catch (Exception exp) {
    exp.printStackTrace();
}

これは、Windows7およびXPで機能します。家に帰ったらMacをテストします

更新しました

JDK7とJDK6を使用してMacOS10.7.5を検証できました

于 2012-10-25T07:21:07.100 に答える