| |
ает задачу.
// Остановка выполняется только в том случае,
// если задача была создана
if (m_MultiTask != null)
{
// Остановка задачи
m_MultiTask.stop();
// Сброс ссылки на задачу
m_MultiTask = null;
}
}
// -------------------------------------------------------
// run
// Метод, который работает в рамках отдельной задачи
// Он вызывает периодическое обновление содержимого
// окна аплета
// -------------------------------------------------------
public void run()
{
// Выполняем обновление окна в бесконечном цикле
while (true)
{
try
{
// Вызываем функцию обновления окна
repaint();
// Выполняем небольшую задержку
Thread.sleep(50);
}
catch (InterruptedException e)
{
// Если при выполнении задержки произошло
// исключение, останавливаем работу задачи
stop();
}
}
}
}
В листинге 1.2 представлен исходный текст документа HTML, предназначенный
для совместной работы с нашим аплетом.
Листинг 1.2. Файл MultiTask\MultiTask.html
MultiTask
The source.
Описание исходных текстов
Для того чтобы аплет стал мультизадачным, его класс, который наследуется от
класса Applet, дополнительно реализует интерфейс Runnable, как это показано
ниже:
public class MultiTask extends Applet implements Runnable
{
. . .
}
Внутри класса определяется поле с именем m_MultiTask типа Thread, которое
предназначено для хранения ссылки на объект класса Thread, то есть на задачу:
Thread m_MultiTask = null;
Поле инициализируется значением null. Реальная ссылка на задачу будет сюда
записана только после создания задачи.
Рассмотрим теперь методы класса.
Конструктор MultiTask
В нашем аплете конструктор не используется.
Метод getAppletInfo
Метод getAppletInfo возвращает информацию об аплете.
Метод init
Метод init вызывается один раз при инициализации аплета. Наше приложение его
не использует.
Метод destroy
При завершении работы аплета управление передается методу destroy. Мы его не
используем.
Метод paint
Метод paint рисует в окне аплета текстовую строку и случайное число,
полученное при помощи статического метода random класса Math:
public void paint(Graphics g)
{
g.drawString("Running: " + Math.random(), 10, 20);
}
Напомним, что в однозадачном приложении метод paint вызывается при первом
создании окна аплета, а также в случае необходимости перерисовки этого окна.
В нашем аплете будет создана отдельная задача, выполняющая периодическую
перерисовку окна при помощи метода repaint. Поэтому случайное число в окне
аплета будет постоянно меняться.
Метод start
Метод start вызывается, когда пользователь отображает документ HTML,
содержащий аплет. Наша реализация этого метода проверяет, создана ли задача
перерисовки окна, и, если эта задача не запущена, создает и запускает ее:
public void start()
{
if(m_MultiTask == null)
{
m_MultiTask = new Thread(this);
m_MultiTask.start();
}
}
Первоначально в поле m_MultiTask находитс
|
|