Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: А.В. Фролов, Г.В. Фролов - Microsoft Visual J++
<<-[Весь Текст]
Страница: из 275
 <<-
 
тся 
из метода start аплета, когда пользователь отображает страницу сервера Web, 
содержащую аплет. Остановка задачи выполняется методом stop.
   Применение мультизадачности для анимации
   Одно из наиболее распространенных применений аплетов - это создание 
анимационных эффектов типа бегущей строки, мерцающих огней или аналогичных, 
привлекающих внимание пользователя. Для того чтобы достичь такого эффекта, 
необходим какой либо механизм, позволяющий выполнять перерисовку всего окна 
аплета или его части периодически с заданным временным интервалом.
   Работа аплетов, так же как и обычных приложений операционной системы 
Microsoft Windows, основана на обработке событий. Для классического приложения 
Microsoft Windows событие - это приход сообщения в функцию окна. Основной класс 
аплета обрабатывает события, переопределяя те или иные методы базового класса 
Applet.
   Проблема с периодическим обновлением окна аплета возникает из-за того, что в 
языке Java не предусмотрено никакого механизма для создания генератора событий, 
способного вызывать какой-либо метод класса аплета с заданным интервалом 
времени. Вы не можете поступить так, как поступали в этой ситуации, 
разрабатывая обычные приложения Microsoft Windows - создать таймер и 
организовать обработку периодически поступающих от него сообщений WM_TIMER.
   Напомним, что перерисовка окна аплета выполняется методом paint, который 
вызывается виртуальной машиной Java асинхронно по отношению к выполнению 
другого кода аплета.
   Можно ли воспользоваться методом paint для периодической перерисовки окна 
аплета, организовав в нем, например, бесконечный цикл с задержкой?
   К сожалению, так поступать ни в коем случае нельзя. Метод paint после 
перерисовки окна аплета должен сразу возвратить управление, иначе работа аплета 
будет заблокирована.
   Единственный выход из создавшейся ситуации - создание задачи (или нескльких 
задач), которые будут выполнять рисование в окне аплета асинхронно по отношению 
к работе кода аплета. Например, вы можете создать задачу, которая периодически 
обновляет окно аплета, вызывая для этого метод repaint, или рисовать из задачи 
непосредственно в окне аплета, получив предварительно для этого окна контекст 
отображения. В примерах аплетов, приведенных в нашей книге, мы будем 
использовать оба способа.
   Приложение MultiTask
   Система автоматизированной разработки аплетов Microsoft Visual J++ позволяет 
указать, что создаваемый аплет будет мультизадачным. Для этого на третьем шаге 
в поле Would you like your applet to be multi-threaded следует включить 
переключатель Yes (рис. 1.1).

Рис. 1.1. Добавление мультизадачности в создаваемый аплет
   Включив указанный переключатель, выключите пока переключатель Would you like 
support for animation - анимацией мы займемся немного позже. 
   После завершения процедуры создания заготовки мультизадачного аплета 
выполните трансляцию и запустите аплет на выполнение. На экране появится 
текстовая строка с числом, значение которого быстро изменяется случайным 
образом.
   Исходные тексты приложения
   В листинге 1.1 представлены исходные тексты мультизадачного приложения 
MultiTask, созданного системой автоматизированной разработки аплетов, слегка 
измененного и снабженного нашими комментариями. В дальнейшем мы создадим блее 
сложные мультизадачные аплеты.
Листинг 1.1. Файл MultiTask\MultiTask.java
// =========================================================
// Периодическое обновление окна аплета 
// с использованием мультизадачности
//
// (C) Фролов А.В, 1997
//
// E-mail: [email protected]
// WWW:    http://www.glasnet.ru/~frolov
//            или
//         http://www.dials.ccas.ru/frolov
// =========================================================
import java.applet.*;
import java.awt.*;

public class MultiTask extends Applet implements Runnable
{
  //
 
<<-[Весь Текст]
Страница: из 275
 <<-