Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / скриншот апплетом / 10 сообщений из 10, страница 1 из 1
08.11.2012, 11:13:11
    #38029820
fendolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скриншот апплетом
Здравствуйте, писал несколько сообщений на этом форуме, по разным моментам на java решая одну задачу нужно сделать скрин окна пользователя, и вывести его. посоветовали решать аплетом используя java.awt.

но так как аплет получает доступ к файловой системе его нужно подписать: http://www.community.terrasoft.ua/blogs/5816(все подробно расписано)
и в самом конце статьи приведенной выше просят переделать код смысл переделки я к сожалению не понял если кто может объясните.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
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 консоль ошибки не валяться) и может быть решение, спасибо.
...
Рейтинг: 0 / 0
08.11.2012, 11:37:00
    #38029867
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скриншот апплетом
fendolfЗдравствуйте, писал несколько сообщений на этом форуме, по разным моментам на java решая одну задачу нужно сделать скрин окна пользователя, и вывести его.
Та мы уже как бы заметили.

fendolfпосоветовали решать аплетом используя java.awt.

Да. Так многие делают. JIRA, GotoMeeting.

fendolfно так как аплет получает доступ к файловой системе его нужно подписать: http://www.community.terrasoft.ua/blogs/5816 (все подробно расписано)

Не только в файловой системе дело. Роботу тоже нельзя делать скриншоты.


fendolfи в самом конце статьи приведенной выше просят переделать код смысл переделки я к сожалению не понял если кто может объясните.

Вызов метода, обращение к которому, может быть ограничено, оборнут в doPriveleged. Я вам уже писал в предыдущих темах обратить внимание на этот метод. Судя по всему вы это проигнорировали и даже в доку не заглянули.

Код ахтунг. Метод paint() кем откуда будет вызываться? Почему он вообще называется paint() будет же путаница с аналогичными методами в AWT.

fendolfесли запустить этот класс не в роли аплета и раскоментить "было", и закоментить "стало" то скрин создается.
класс подписан, появляется окно как в приведенной выше статье.
У вас метод из JavaScript вызывается?


fendolf подскажите как найти проблему(в java консоль ошибки не валяться) и может быть решение, спасибо.
Аплет вообще загрузился? Init отработал? paint() вызвался? Кем?
...
Рейтинг: 0 / 0
08.11.2012, 11:39:32
    #38029874
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скриншот апплетом
В doPrivileged у вас только один метод обернут, который требует специальных разрешений - getScreenSize().
А в коде у вас минимум 4 таких метода. Ещё
createScreenCapture(),
write(screenShot, "JPG", file);
createNewFile()

Но чтобы выработать правильное решение ответьте на вопросы выше тоже.
...
Рейтинг: 0 / 0
08.11.2012, 13:16:37
    #38030122
fendolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скриншот апплетом
аплет работает, выводил из примера хелоу ворлд. вызываю его из jsp странички


Код: sql
1.
<APPLET CODE="Life.class" ARCHIVE ="Life.jar"  WIDTH="200" HEIGHT=100> </APPLET>
...
Рейтинг: 0 / 0
08.11.2012, 13:20:50
    #38030127
fendolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скриншот апплетом
http://students.uni-vologda.ac.ru/pages/pm00/vrn&haa/part3.html
вот этот пример запусткаеться, после стал переделывать его под "скрин", так же отдельно работает "скрин" но не через аплеты(то есть все лежит на одной машине)
public void paint(Graphics g) {
g.drawString("Hello, world!",70,50);
System.out.println("Method paint()");
}
...
Рейтинг: 0 / 0
08.11.2012, 13:23:05
    #38030133
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скриншот апплетом
paint(Graphics g) и paint() это не одно и то же.
Первый переопределяет существующий метод апплета, и вызывается системой для отрисовки.
Ваш метод никем никогда не вызывается. Не нужно в этом методе много кода писать. Он вызывается часто. Будет тормозить. Инициализацию лучше вынести в соответствующий метод.
...
Рейтинг: 0 / 0
08.11.2012, 13:26:43
    #38030144
fendolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скриншот апплетом
public void Main() throws IOException {


try {
Robot robot = new Robot();



пусть будет тогда так. да странно что нигде этот метод не вызываю но все работает
...
Рейтинг: 0 / 0
08.11.2012, 13:28:56
    #38030150
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скриншот апплетом
fendolfпусть будет тогда так. да странно что нигде этот метод не вызываю но все работает
Main() это конструктор чего? Вы постоянно меняете код, приводите один, у вас актуальный другой. Бросайте это дело и завадайте конкретные вопросы. Если "всё работает", то какая тогда проблема?
...
Рейтинг: 0 / 0
08.11.2012, 14:53:10
    #38030347
fendolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скриншот апплетом
меняю из за того что не понимаю.
вот то что есть: появляеться окно о риске( http://www.community.terrasoft.ua/blogs/5816)
но скрин не пишится в нужную мне папку. подскажи как ошубку искать ибо в консоле java нет ничего

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
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 {
            
              
            //было
            // Dimension clipboard  = Toolkit.getDefaultToolkit().getScreenSize();
            //BufferedImage screenShot = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));   
             //было
            
            
             //стало
            Dimension dim  = (Dimension) AccessController.doPrivileged(new PrivilegedAction() {
                public Object run() {
                    
            Robot robot;        
                try {
                    robot = new Robot();
                    Dimension clipboard  = Toolkit.getDefaultToolkit().getScreenSize();
                    BufferedImage screenShot = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));   
                    screenShot= screenShot.getSubimage(0, 0, 400, 400);
                    File file = new File("c://temp//screenShot.jpg");
                    try {
                        //file = file.getSubimage( 0, 0, 100, 100);
                         ImageIO.write(screenShot, "JPG", file);
                    } catch (IOException ex) {
                        Logger.getLogger(Life.class.getName()).log(Level.SEVERE, null, ex);
                    }
                     System.out.println(file.exists()); // look for a real file
                    try {
                        newFile = file.createNewFile(); // maybe create a file!
                    } catch (IOException ex) {
                        Logger.getLogger(Life.class.getName()).log(Level.SEVERE, null, ex);
                    }
                     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);
                }
            
            
                    
                    
                    
                    
                                      return Toolkit.getDefaultToolkit().getScreenSize();
                                     }
             });

            /*BufferedImage screenShot = robot.createScreenCapture(
                                                               new Rectangle(
                                                                              dim  
                                                                             )); */
             //стало
            
            
       // } catch (AWTException ex) {
        //    Logger.getLogger(Life.class.getName()).log(Level.SEVERE, null, ex);
        //}
      }
   }




и вызов из jsp

Код: sql
1.
2.
<APPLET CODE="Life.class" ARCHIVE ="Life.jar"  WIDTH="200" HEIGHT=100>
   </APPLET>
...
Рейтинг: 0 / 0
08.11.2012, 15:02:18
    #38030367
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скриншот апплетом
Метод paint() вообще вызывается? У вас недопониманя в самых основах, откуда методы вызываются и почему. А вы пытаетесь сразу готовое решение при этом получить. При этом вы утверждаете что ошибка в самом коде. Хотя у меня есть впечатление что ошибка в том что код вообще не вызывается. Обоснуйте свою точку зрения.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / скриншот апплетом / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]