powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / скриншот апплетом
10 сообщений из 10, страница 1 из 1
скриншот апплетом
    #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
скриншот апплетом
    #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
скриншот апплетом
    #38029874
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В doPrivileged у вас только один метод обернут, который требует специальных разрешений - getScreenSize().
А в коде у вас минимум 4 таких метода. Ещё
createScreenCapture(),
write(screenShot, "JPG", file);
createNewFile()

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


Код: sql
1.
<APPLET CODE="Life.class" ARCHIVE ="Life.jar"  WIDTH="200" HEIGHT=100> </APPLET>
...
Рейтинг: 0 / 0
скриншот апплетом
    #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
скриншот апплетом
    #38030133
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paint(Graphics g) и paint() это не одно и то же.
Первый переопределяет существующий метод апплета, и вызывается системой для отрисовки.
Ваш метод никем никогда не вызывается. Не нужно в этом методе много кода писать. Он вызывается часто. Будет тормозить. Инициализацию лучше вынести в соответствующий метод.
...
Рейтинг: 0 / 0
скриншот апплетом
    #38030144
fendolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
public void Main() throws IOException {


try {
Robot robot = new Robot();



пусть будет тогда так. да странно что нигде этот метод не вызываю но все работает
...
Рейтинг: 0 / 0
скриншот апплетом
    #38030150
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fendolfпусть будет тогда так. да странно что нигде этот метод не вызываю но все работает
Main() это конструктор чего? Вы постоянно меняете код, приводите один, у вас актуальный другой. Бросайте это дело и завадайте конкретные вопросы. Если "всё работает", то какая тогда проблема?
...
Рейтинг: 0 / 0
скриншот апплетом
    #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
скриншот апплетом
    #38030367
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Метод paint() вообще вызывается? У вас недопониманя в самых основах, откуда методы вызываются и почему. А вы пытаетесь сразу готовое решение при этом получить. При этом вы утверждаете что ошибка в самом коде. Хотя у меня есть впечатление что ошибка в том что код вообще не вызывается. Обоснуйте свою точку зрения.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / скриншот апплетом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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