

import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.concurrent.WorkerStateEvent;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.PointLight;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Sphere;
import javafx.stage.Stage;
import javax.imageio.ImageIO;

public class AWTRobotScreenCaptureTest extends Application {

    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(Stage stage) {

        Sphere sphere1 = new Sphere(100);
        sphere1.setTranslateX(300);
        sphere1.setTranslateY(50);
        sphere1.setTranslateZ(400);
        PhongMaterial whiteMaterial1 = new PhongMaterial(Color.RED);
        whiteMaterial1.setSpecularColor(Color.LIGHTBLUE);
        sphere1.setMaterial(whiteMaterial1);

        Sphere sphere2 = new Sphere(100);
        sphere2.setTranslateX(500);
        sphere2.setTranslateY(50);
        sphere2.setTranslateZ(400);
        PhongMaterial whiteMaterial2 = new PhongMaterial(Color.BLUE);
        whiteMaterial2.setSpecularColor(Color.LIGHTBLUE);
        sphere2.setMaterial(whiteMaterial2);

        PointLight light = new PointLight();
        light.setTranslateX(250);
        light.setTranslateY(100);
        light.setTranslateZ(300);

        PerspectiveCamera camera = new PerspectiveCamera(false);
        camera.setTranslateX(200);
        camera.setTranslateY(-50);
        camera.setTranslateZ(300);

        Group root = new Group(sphere1, sphere2);

        Scene scene = new Scene(root, 400, 200, true);
        scene.setFill(Color.GREY);
        scene.setCamera(camera);
        stage.setScene(scene);
        stage.setTitle("AWT Robot ScreenCapture Test");
        stage.show();

        Task<Void> capturer = new Task<Void>() {
            @Override
            protected Void call() throws Exception {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                }
                return null;
            }
        };
        capturer.setOnSucceeded((WorkerStateEvent dummy) -> {

            String name3 = "AWTRobot.bmp";
            // AWT Robot
            java.awt.Robot AWTRobot = null;
            try {
                AWTRobot = new java.awt.Robot();
            } catch (Exception e) {
                System.err.println("cannot create AWT robot");
            }

            BufferedImage image = AWTRobot.createScreenCapture(
                    new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));

            try {
                ImageIO.write(image, "bmp", new File(name3));
            } catch (Exception e) {
                System.err.println("cannot write " + name3);
            }

            stage.close();
        });
        new Thread(capturer).start();
    }
}
