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

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

Библиотека :: Компьютеры и Программирование :: А.В. Фролов, Г.В. Фролов - Microsoft Visual J++
<<-[Весь Текст]
Страница: из 275
 <<-
 
 значение null, поэтому при первом 
вызове метода start всегда создается задача как объекта класса Thread. При этом 
конструктору с помощью ключевого слова this передается ссылка на наш аплет, 
поэтому при запуске задачи управление будет передано методу run, определенному 
в аплете.
   Созданная задача не запускается автоматически. Для запуска необходимо 
вызвать метод start.
   Метод stop
   Когда пользователь покидает страницу с аплетом, имеет смысл остановить нашу 
задачу, чтобы она не отнимала ресурсов процессора. Остановка выполняется с 
помощью метода stop:
public void stop()
{
  if(m_MultiTask != null)
  {
    m_MultiTask.stop();
    m_MultiTask = null;
  }
}
   После остановки мы записываем в поле m_MultiTask значение null.
   Метод run
   Метод run получает управление при запуске задачи методом start. Если этот 
метод возвращает управление, соответствующая задача завершает свою работу.
   Наша реализация метода run состоит из бесконечного цикла, в котором 
периодически с задержкой 50 миллисекунд вызывается метод repaint:
public void run()
{
  while(true)
  {
    try
    {
      repaint();
      Thread.sleep(50);
    }
    catch(InterruptedException e)
    {
      stop();
    }
  }
}
   Метод repaint вызывает принудительную перерисовку окна аплета, выполняемую 
методом paint. В нашем приложении этот метод отображает текстовую строку и 
случайное число.
   Для выполнения задержки метод run вызывает метод sleep из класса Thread. Так 
как метод sleep может вызывать исключение InterruptedException, мы его 
обрабатываем с помощью операторов try и catch. Если произошло исключение, мы 
завершаем задачу, вызывая метод stop.
   Заметим, что периодическая перерисовка окна аплета может привести к 
неприятному миганию, поэтому использованный здесь метод периодического 
обновления содержимого окна аплета нельзя назвать оптимальным. Позже мы 
рассмотрим другой метод, при котором такой перерисовки не происходит.
   Приложение Rectangles
   В предыдущем приложении задача выполняла периодическую перерисовку окна 
аплета, вызывая из метода run метод repaint. Такая методика приводит к сильному 
мерцанию окна аплета и поэтому во многих случаях нежелательна. Приложение 
Rectangles, постоянно отображающее в своем окне прямоугольники случайного 
размера, расположения и цвета (рис. 1.2), использует другой способ. Оно 
запускает задачу, которая рисует в окне аплета непосредственно.

Рис. 1.2. Окно аплета Rectangles
   В результате в каждый момент времени перерисовывается только часть окна 
аплета и мерцание отсутствует.
   Исходные тексты приложения
   Исходный файл приложения Rectangles приведен в листинге 1.3.
Листинг 1.3. Файл Rectangles\Rectangles.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.*;
import java.util.*;

public class Rectangles extends Applet implements Runnable
{
  // Ссылка на задачу рисования прямоугольников
  Thread m_Rectangles = null;

  // -------------------------------------------------------
  // getAppletInfo
  // Метод, возвращающей строку информации об аплете
  // -------------------------------------------------------
  public String getAppletInfo()
  {
    return 
 
<<-[Весь Текст]
Страница: из 275
 <<-