| |
---------------------------
// run
// Метод, который работает в рамках отдельной задачи
// Он рисует в окне аплета эллипсы случайного
// цвета, размера и расположения
// -------------------------------------------------------
public void run()
{
while (true)
{
int x, y, width, height;
int rColor, gColor, bColor;
// Выбираем случайным образом размеры
// и расположение рисуемого эллипса
x = (int)(dimAppWndDimension.width * Math.random());
y = (int)(dimAppWndDimension.height * Math.random());
width = (int)(dimAppWndDimension.width *
Math.random()) / 2;
height = (int)(dimAppWndDimension.height *
Math.random()) / 2;
// Выбираем случайный цвет для рисования эллипса
rColor = (int)(255 * Math.random());
gColor = (int)(255 * Math.random());
bColor = (int)(255 * Math.random());
// Устанавливаем выбранный цвет
// в контексте отображения
g.setColor(new Color(rColor, gColor, bColor));
// Рисуем эллипс
g.fillOval(x, y, width, height);
// Выполняем задержку на 50 миллисекунд
try
{
Thread.sleep(50);
}
catch (InterruptedException e)
{
stop();
}
}
}
}
В листинге 1.6 мы привели исходный текст документа HTML, предназначенного
для совместной работы с нашим приложением.
Листинг 1.6. Файл MultiTask2\ MultiTask2.html
MultiTask2
The source.
Описание исходного текста
В этом приложении мы создаем на базе класса Thread два класса, один из
которых предназначен для создания задачи рисования прямоугольников, а другой -
для создания задачи рисования закрашенных эллипсов.
Что же касается основного класса аплета, то он унаследован, как обычно, от
класса Applet и не реализует интерфейс Runnable.
Поля класса MultiTask2
В классе MultiTask2 мы определили два поля с именами m_DrawRectThread и
m_DrawEllipseThread:
DrawRectangles m_DrawRectThread = null;
DrawEllipse m_DrawEllipseThread = null;
Эти поля являются ссылками на классы, соответственно DrawRectangles и
DrawEllipse. Первый из них создан для рисования прямоугольников, а второй -
эллипсов.
Указанные поля инициализируются занчением null, что соответствует
неработающим или несозданным задачам.
Метод paint класса MultiTask2
Метод paint класса MultiTask2 не делает ничего нового по сравнению с
аналогичным методом предыдущего аплета. Он просто раскрашивает окно аплета в
желтый цвет и рисует вокруг него черную рамку.
Метод start класса MultiTask2
Этот метод последовательно создает две задачи и запускает их на выполнение:
public void start()
{
if (m_DrawRectThread == null)
{
m_DrawRectThread = new DrawRectangles(this);
m_DrawRectThread.start();
}
if (m_DrawEllipseThread == null)
{
m_DrawEllipseThread = new DrawEllipse(this);
m_DrawEllipseThread.start();
}
}
Метод stop класса MultiTask2
Когда пользователь покидает страницу сервера Web с аплетом, метод stop
класса MultiTask2 последовательно останавливает задачи рисования
прямоугольников и эллипсов:
public void stop()
{
if (m_DrawRectThread != null)
{
m_DrawRectThread.stop();
m_DrawRectThread = null;
}
if (m_DrawEllipseThread == null)
{
m_DrawEllipseThread.stop();
m_DrawEllipseThread = null;
}
}
Поля класса DrawRectangles
Класс DrawRectangles определен для задачи рисования прямоугольников. В поле
g класа хранится контекст отображения окна аплета, а в поле dimAppWndDimension
- размеры этого окна. Значения этих полей определяются конструктором класса
|
|