Немного Java - и страница ожила

         

рисует периодически сдвигаемую текстовую строку


Следующий метод - paint - рисует периодически сдвигаемую текстовую строку в текущей позиции m_CurrentXPosition:
g.drawString(m_Text, m_CurrentXPosition, 20);
Затем эта позиция уменьшается на единицу, в результате чего при следующем вызове метода paint строка будет нарисована левее на один пиксел:
m_CurrentXPosition-;
Когда вся строка будет сдвинута влево и исчезнет с экрана, текущая позиция устанавливается равной ширине окна аплета:
if(m_CurrentXPosition < -m_StringSize) m_CurrentXPosition = size().width;
Далее строка снова появится в правой части окна и будет сдвигаться влево при каждом вызове метода paint.
Метод start получает управление при активизации, когда в окне браузера появляется документ HTML с нашим аплетом. Если в поле m_SimpleScroll находится значение null, метод start создает новый поток, который будет периодически перерисовывать окно аплета:
if (m_SimpleScroll == null) { m_SimpleScroll = new Thread(this); m_SimpleScroll.start(); }
Здесь новый поток класса Thread получает при создании ссылку на аплет. Новый поток не будет работать автоматически. Для того чтобы его запустить, мы вызываем метод start из класса Thread.
Когда пользователь покидает страницу с аплетом, следует остановить работу потока, чтобы он не отнимал системные ресурсы. Наша реализация метода stop делает это, вызывая метод stop из класса Thread:
if (m_SimpleScroll != null) { m_SimpleScroll.stop(); m_SimpleScroll = null; }
Разумеется, остановка выполняется только в том случае, если поток был создан. Это можно узнать по значению поля m_SimpleScroll, в котором должна находиться правильная ссылка на объект. После остановки потока мы записываем в это поле значение null.
Метод run, как мы уже говорили, не вызывается никаким другим методом, определенным в нашем аплете. Этот метод получает управление и работает в рамках самостоятельного потока, когда для соответствующего объекта вызывается метод start. Это происходит при активизации аплета. Run включает в себя бесконечный цикл, внутри которого вызывается метод repaint, с последующей задержкой на 50 мс:
try { repaint(); Thread.sleep(50); } catch (InterruptedException e) { stop(); }
При возникновении исключения InterruptedException поток останавливается методом stop.
Продолжение в следующем номере.
Александр Вячеславович Фролов, Григорий Вячеславович Фролов - авторы серий книг "Библиотека системного программиста" и "Персональный компьютер. Шаг за шагом".
E-mail: frolov@glas.apc.org
Web: http://www.glasnet.ru/~frolov, http://www.dials.ccas.ru/frolov

Содержание  Назад  Вперед







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий