Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скриншот апплетом 
:(
    Опции темы
feda1984
Дата 8.11.2012, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 3.9.2012

Репутация: нет
Всего: 0



Здравствуйте, писал несколько сообщений на этом форуме, по разным моментам на java решая одну задачу нужно сделать скрин окна пользователя, и вывести его. посоветовали решать аплетом используя java.awt.

но так как аплет получает доступ к файловой системе его нужно подписать: http://www.community.terrasoft.ua/blogs/5816(все подробно расписано)
и в самом конце статьи приведенной выше просят переделать код смысл переделки я к сожалению не понял если кто может объясните.
Код
import java.awt.image.BufferedImage;
import java.awt.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO; 
import java.io.*; 
import java.applet.*; // импортируем классы для создания апплета
import java.awt.datatransfer.Clipboard;
import java.security.AccessController;
import java.security.PrivilegedAction;

  
   public class Life extends Applet {
   private static boolean newFile;    
      public void paint() throws IOException {
         
        
         try {
            Robot robot = new Robot(); 
              
            //было
            // Dimension clipboard  = Toolkit.getDefaultToolkit().getScreenSize();
            //BufferedImage screenShot = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));   
             //было
            
            
             //стало
            Dimension dim  = (Dimension) AccessController.doPrivileged(new PrivilegedAction() {
                public Object run() {
                                      return Toolkit.getDefaultToolkit().getScreenSize();
                                     }
             });

            BufferedImage screenShot = robot.createScreenCapture(
                                                               new Rectangle(
                                                                              dim  
                                                                             )); 
             //стало
            
            screenShot= screenShot.getSubimage(0, 0, 400, 400);
            File file = new File("c://temp//screenShot.jpg");
            //file = file.getSubimage( 0, 0, 100, 100);
            ImageIO.write(screenShot, "JPG", file); 
            System.out.println(file.exists()); // look for a real file
            newFile = file.createNewFile(); // maybe create a file!
            System.out.println(newFile); // already there?
            System.out.println(file.exists()); // look again 
        } catch (AWTException ex) {
            Logger.getLogger(Life.class.getName()).log(Level.SEVERE, null, ex);
        }
      }
   }


если запустить этот класс не в роли аплета и раскоментить "было", и закоментить "стало"  то скрин создается. 
класс подписан, появляется окно как в приведенной выше статье. подскажите как найти проблему(в java консоль ошибки не валяться) и может быть решение, спасибо. 
PM MAIL   Вверх
dorogoyIV
Дата 8.11.2012, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



строка 41

PM MAIL   Вверх
feda1984
Дата 8.11.2012, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 3.9.2012

Репутация: нет
Всего: 0



Цитата(dorogoyIV @ 8.11.2012,  11:05)
строка 41

а подробнее? на локальной машине и не через аплеты все работает, то есть скрин с экрана того компа где лежит класс я могу сделать и сохраняется все нормально. в плате того что со слешами все впорядке
PM MAIL   Вверх
k0rvin
Дата 8.11.2012, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



1) Каталога "C:/temp/" может и не быть на машине пользователя.
2.1) Вообще это дурной тон, записывать пользовательские данные в системный каталог, нужно использовать какой-нибудь типа "%APPDATA%/YourCompanyName/YourProgramName/" или "%TEMP%/" или "%USERPROFILE%/Temp/";
2.2) Вполне возможно, что в Java уже есть готовый класс, инкапсулирующий работу с окружением вообще и подобными каталогами вчастности, следует использовать его, т.к. у пользователя может оказаться Mac OSX например или Linux или еще что-нибудь.
3) Наверное не стоит вот так создавать файл (у тебя метод createNewFile вызывается независимо от того, существует файл или нет), если он уже существует:
Код

import java.io.File;
import java.io.IOException;

public class FileTest {

    private static File getFile(String filename) {
        String tmpDirPath = System.getProperty("java.io.tmpdir");
        String separator = System.getProperty("file.separator");
        File file = new File(tmpDirPath + separator + filename);
        if (file.exists()) {
            return file;
        }
        try {
            boolean fileCreated = file.createNewFile();
            if (fileCreated) {
                return file;
            } else {
                return null;
            }
        } catch (IOException e) {
            e.printStackTrace();  // TODO: implement exception handling
            return null;
        }
    }

    public static void main(String[] args) {
        File file = getFile("foo.txt");

        if (file == null) {
            // TODO: message user that program can not find/access file
            return;
        }
        System.out.println(file.getAbsolutePath());
    }
}


Думаю в этом дело.

P.S. В оракловской доке почему-то не указано, что есть свойство "java.io.tmpdir", нашел в гугле, статья за 2010-й год, может оно deprecated, не знаю.

P.P.S. вот еще пояснение про tmpdir.

Это сообщение отредактировал(а) k0rvin - 8.11.2012, 13:19


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0682 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.