Tomcat / JSP: открытие файла на сервере и создание снимка экрана - PullRequest
1 голос
/ 18 ноября 2010

Я настраиваю веб-интерфейс для тестового сервера.Некоторые из тестов включают в себя открытие определенного файла, захват экрана, а затем сохранение полученного изображения.Для этого я использую Runtime.getRuntime().exec() и Robot.

Если я получаю доступ к серверу через удаленный рабочий стол и запускаю тесты, все работает нормально;файл открывается и снимок экрана сохраняется.Если я попытаюсь выполнить те же тесты через файл JSP с Tomcat, файл не откроется (хотя процесс можно найти в диспетчере задач), а изображение будет полностью черным.приведет к черному / пустому изображению (из файла JSP):

/* initializing stuff goes here */
Runtime.getRuntime().exec("C:\\Windows\\System32\\notepad.exe");
BufferedImage screenCap = robot.createScreenCapture(rect);
File savedImage = new File("C:\\test.png");
ImageIO.write(screenCap, "png", savedImage);

Возможно ли то, что я пытаюсь сделать?

Ответы [ 2 ]

0 голосов
/ 18 ноября 2010

В MS Windows: если tomcat запускается как служба, он может пропустить разрешения на взаимодействие с рабочим столом и, следовательно, не сможет запускать программы, открывающие окна.

В диалоговом окне свойств службы есть галочка.

0 голосов
/ 18 ноября 2010

JSP должен обслуживаться веб-сервером и просматриваться веб-браузером. Используйте Desktop#browse() на http://localhost, чтобы просмотреть его и сделать снимок экрана только через некоторое время (5 секунд?). Конечно, браузеру нужно время для запуска и полной загрузки страницы.

Пример запуска:

Desktop.getDesktop().browse(new URI("http://localhost:8080/page.jsp"));
Thread.sleep(5000);
BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(image, "png", new File("/screen.png"));

Однако вы должны принять во внимание, что это задание необходимо поставить в очередь, чтобы избежать того, что различные запросы захвата экрана мешают друг другу. Также обратите внимание, что это не сработает на автономном сервере (на сервере без монитора).

...