2a9cfd0b

Метод вызывается при первом отображении


  // -------------------------------------------------------

  public void destroy()

  {

  }

  // -------------------------------------------------------

  // paint

  // Метод paint, выполняющий рисование в окне аплета

  // -------------------------------------------------------

  public void paint(Graphics g)

  {

    // Отображения строки со случайным числом



    g.drawString("Running: " + Math.random(), 10, 20);

  }

  // -------------------------------------------------------

  // start

  // Метод вызывается при первом отображении окна аплета

  // -------------------------------------------------------

  public void start()

  {

    // Если задача еще не была создана, аплет создает

    // новую задачу как объект класса Thread,

    // а затем запускает ее

    if (m_MultiTask == null)

    {

      // Создание задачи

      m_MultiTask = new Thread(this);

      // Запуск задачи

      m_MultiTask.start();

    }

  }

      

  // -------------------------------------------------------

  // stop

  // Метод вызывается, когда страница с аплетом

  // исчезает с экрана

  // -------------------------------------------------------

  public void stop()

  {

    // Когда пользователь покидает страницу с аплетом,

    // метод stop останавливает задачу.

    // Остановка выполняется только в том случае,

    // если задача была создана

    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

<html>

<head>

<title>MultiTask</title>

</head>

<body>

<hr>

<applet

    code=MultiTask.class

    id=MultiTask

    width=320

    height=240 >

</applet>

<hr>

<a href="MultiTask.java">The source.</a>

</body>

</html>



  // -------------------------------------------------------

  // start

  // Метод вызывается при первом отображении окна аплета

  // -------------------------------------------------------

  public void start()

  {

    if (m_Rectangles == null)

    {

      m_Rectangles = new Thread(this);

      m_Rectangles.start();

    }

  }

      

  // -------------------------------------------------------

  // start

  // Метод вызывается при первом отображении окна аплета

  // -------------------------------------------------------

  public void stop()

  {

    if (m_Rectangles != null)

    {

      m_Rectangles.stop();

      m_Rectangles = null;

    }

  }

  // -------------------------------------------------------

  // run

  // Метод, который работает в рамках отдельной задачи

  // Он рисует в окне аплета прямоугольники случайного

  // цвета, размера и расположения

  // -------------------------------------------------------

  public void run()

  {

    // Получаем контекст отображения для окна аплета

    Graphics g = getGraphics();

    // Определяем текущие размеры окна аплета

    Dimension dimAppWndDimension = size();

    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.setColor(Color.black);

    // Рисуем рамку вокруг окна аплета

    g.drawRect(0, 0,

      dimAppWndDimension.width  - 1,

      dimAppWndDimension.height - 1);

  }

  // -------------------------------------------------------

  // start

  // Метод вызывается при первом отображении окна аплета

  // -------------------------------------------------------

  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

  // Метод вызывается, когда окно аплета исчезает с экрана

  // -------------------------------------------------------

  public void stop()

  {

    if (m_DrawRectThread != null)

    {

      m_DrawRectThread.stop();

      m_DrawRectThread = null;

    }

    if (m_DrawEllipseThread == null)

    {

      m_DrawEllipseThread.stop();

      m_DrawEllipseThread = null;

    }

  }

}

// =========================================================

// Класс задачи для рисования прямоугольников

// =========================================================

class DrawRectangles extends Thread

{

  // Контекст отображения окна аплета

  Graphics g;

  // Размеры окна аплета

  Dimension dimAppWndDimension;

  // -------------------------------------------------------

  // DrawRectangles

  // Конструктор класса DrawRectangles

  // -------------------------------------------------------

  public DrawRectangles(Applet Appl)

  {

    // Получаем и сохраняем контекст отображения

    g = Appl.getGraphics();

    // Определяем текущие размеры окна аплета

    dimAppWndDimension = Appl.size();

  }

  // -------------------------------------------------------



      "WWW:    http://www.glasnet.ru/~frolov" +

      " Created with Microsoft Visual J++ Version 1.0";

  }

  // -------------------------------------------------------

  // getParameterInfo

  // Иинформация о параметрах

  // -------------------------------------------------------

  public String[][] getParameterInfo()

  {

    String[][] info =

    {

      { PARAM_String1, "String", "Parameter description" },

      { PARAM_String2, "String", "Parameter description" },

      { PARAM_String3, "String", "Parameter description" },

      { PARAM_String4, "String", "Parameter description" },

      { PARAM_String5, "String", "Parameter description" },

      { PARAM_String6, "String", "Parameter description" },

    };

    return info;          

  }

  // -------------------------------------------------------

  // init

  // Метод, получающий управление при инициализации аплета

  // -------------------------------------------------------

  public void init()

  {

    // Рабочая строка

    String param;

    // Получение параметров

    param = getParameter(PARAM_String1);

    if (param != null)

      m_String1 = param;

    param = getParameter(PARAM_String2);

    if (param != null)

      m_String2 = param;

    param = getParameter(PARAM_String3);

    if (param != null)

      m_String3 = param;

    param = getParameter(PARAM_String4);

    if (param != null)

      m_String4 = param;

    param = getParameter(PARAM_String5);

    if (param != null)

      m_String5 = param;

    param = getParameter(PARAM_String6);

    if (param != null)

      m_String6 = param;

  }

  // -------------------------------------------------------

  // paint

  // Метод paint, выполняющий рисование в окне аплета

  // -------------------------------------------------------



  public String[][] getParameterInfo()

  {

    String[][] info =

    {

      { PARAM_str,   "String", "String to draw" },

      { PARAM_font,  "String", "Font name" },

      { PARAM_style, "String", "Font style" },

      { PARAM_size,  "String", "Font size" },

      { PARAM_color, "String", "String color" },

      { PARAM_delay, "int",    "Output delay" },

    };

    return info;   

  }

  // -------------------------------------------------------

  // init

  // Метод, получающий управление при инициализации аплета

  // -------------------------------------------------------

  public void init()

  {

    // Рабочая строка

    String param;

    // Получение значений параметров

    param = getParameter(PARAM_str);

    if (param != null)

      m_Str = param;

    param = getParameter(PARAM_font);

    if (param != null)

      m_Fnt = param;

    param = getParameter(PARAM_style);

    if (param != null)

      m_style = param;

    param = getParameter(PARAM_size);

    if (param != null)

      m_size = Integer.parseInt(param);

    param = getParameter(PARAM_color);

    if (param != null)

      m_color = param;

    param = getParameter(PARAM_delay);

    if (param != null)

      m_delay = Integer.parseInt(param);

  }

  // -------------------------------------------------------

  // paint

  // Метод paint, выполняющий рисование в окне аплета

  // -------------------------------------------------------

  public void paint(Graphics g)

  {

    // Определяем текущие размеры окна аплета

    Dimension dimAppWndDimension = size();

    // Определяем текущие размеры окна аплета

    dimAppWndDimension = size();

   

    // Выбираем в контекст отображения желтый цвет

    g.setColor(Color.yellow);

   

    // Закрашиваем внутреннюю область окна аплета



    // Выбираем в контекст отображения черный цвет

    g.setColor(Color.black);

    // Рисуем рамку вокруг окна аплета

    g.drawRect(0, 0,

      dimAppWndDimension.width  - 1,

      dimAppWndDimension.height - 1);

  }

  // -------------------------------------------------------

  // start

  // Метод вызывается при первом отображении окна аплета

  // -------------------------------------------------------

  public void start()

  {

    if (m_DrawRectThread == null)

    {

      m_DrawRectThread = new DrawRectangles(this);

      m_DrawRectThread.start();

    }

    if (m_NotifyTaskThread == null)

    {

      // Создаем задачу, передавая ей ссылку на

      // задачу рисования прямоугольников, которую

      // необходимо периодически разблокировать

      m_NotifyTaskThread = new NotifyTask(m_DrawRectThread);

      m_NotifyTaskThread.start();

    }

  }

      

  // -------------------------------------------------------

  // stop

  // Метод вызывается, когда окно аплета исчезает с экрана

  // -------------------------------------------------------

  public void stop()

  {

    if (m_DrawRectThread != null)

    {

      m_DrawRectThread.stop();

      m_DrawRectThread = null;

    }

    if (m_NotifyTaskThread != null)

    {

      m_NotifyTaskThread.stop();

      m_NotifyTaskThread = null;

    }

  }

}

// =========================================================

// Класс задачи для рисования прямоугольников

// =========================================================

class DrawRectangles extends Thread

{

  // Контекст отображения окна аплета

  Graphics g;

  // Размеры окна аплета

  Dimension dimAppWndDimension;

  // -------------------------------------------------------

  // DrawRectangles

  // Конструктор класса DrawRectangles

  // -------------------------------------------------------

  public DrawRectangles(Applet Appl)

  {

    // Получаем и сохраняем контекст отображения



      // Записываем строку sOut в выходной поток

      OutStream.writeBytes(sOut);

      // Сбрасываем содержимое буфера

      OutStream.flush();

      // Копируем содержимое потока в массив bMemStream

      bMemStream = baStream.toByteArray();

      // Закрываем выходной поток

      OutStream.close();

    }

    catch(Exception ioe)

    {

    }

  }

  // -------------------------------------------------------

  // paint

  // Метод paint, выполняющий рисование в окне аплета

  // -------------------------------------------------------

  public void paint(Graphics g)

  {

    // Определяем текущие размеры окна аплета

    Dimension dimAppWndDimension = size();

   

    // Выбираем в контекст отображения желтый цвет

    g.setColor(Color.yellow);

   

    // Закрашиваем внутреннюю область окна аплета

    g.fillRect(0, 0,

      dimAppWndDimension.width  - 1,

      dimAppWndDimension.height - 1);

    // Выбираем в контекст отображения черный цвет

    g.setColor(Color.black);

    // Рисуем рамку вокруг окна аплета

    g.drawRect(0, 0,

      dimAppWndDimension.width  - 1,

      dimAppWndDimension.height - 1);

    try

    {

      // Создаем входной буферизованный поток данных

      InStream = new DataInputStream(

        new BufferedInputStream(

        new ByteArrayInputStream(bMemStream)));

      // Читаем одну строку из созданного входного потока

      // и отображаем ее

      g.drawString(InStream.readLine(), 10, 20);

      // Закрываем входной поток

      InStream.close();

    }

    catch(Exception ioe)

    {

    }

  }

}

В листинге 2.4 вы найдете исходный текст документа HTML, созданный автоматически для нашего аплета системой Microsoft Visual J++.

Листинг 2.4. Файл MemStream\MemStream.html

<html>

<head>

<title>MemStream</title>

</head>

<body>

<hr>

<applet

    code=MemStream.class

    id=MemStream

    width=320

    height=240 >

</applet>

<hr>

<a href="MemStream.java">The source.</a>

</body>

</html>



}

// =========================================================

// Класс SimpleDBMS

// Простейшая база данных

// =========================================================

class SimpleDBMS

{

  // Файл индексов

  RandomAccessFile idx;

  // Файл данных

  RandomAccessFile dat;

  // Значение указателя на текущую запись

  long idxFilePointer = 0;

  // -------------------------------------------------------

  // SimpleDBMS

  // Конструктор. Создает и открывает файлы базы данных

  // -------------------------------------------------------

  public SimpleDBMS(String IndexFile, String DataFile)

  {

    try

    {

      // Создаем и открываем файл индексов

      idx = new RandomAccessFile(IndexFile, "rw");

      // Создаем и открываем файл данных

      dat = new RandomAccessFile(DataFile, "rw");

    }

    catch(Exception ioe)

    {

      System.out.println(ioe.toString());

    }

  }

  // -------------------------------------------------------

  // close

  // Метод close. Закрывает файлы базы данных

  // -------------------------------------------------------

  public void close()

  {

    try

    {

      // Закрываем файл индексов

      idx.close();

      // Закрываем файл данных

      dat.close();

    }

    catch(Exception ioe)

    {

      System.out.println(ioe.toString());

    }

  }

  // -------------------------------------------------------

  // AddRecord

  // Добавление записи в базу данных

  // -------------------------------------------------------

  public void AddRecord(String name, int account)

  {

    try

    {

      // Устанавливаем текущую позицию в файлах

      // индекса и данных на конец файла

      idx.seek(idx.length());

      dat.seek(dat.length());

      // Получаем смещение в файле данных места,

      // куда будет добавлена новая запись

      idxFilePointer = dat.getFilePointer();

      // Сохраняем это смещение в файле индексов



        // содержимого устанавливаем код ошибки, равный 1

        errno = 1;

      }

    }

    catch (MalformedURLException uex)

    {

      showStatus("MalformedURLException exception");

      // При возникновении ошибки в процессе создания

      // объекта класса URL устанавливаем код ошибки,

      // равный 2

      errno = 2;

    }

  }

  // -------------------------------------------------------

  // paint

  // Метод paint, выполняющий рисование в окне аплета

  // -------------------------------------------------------

  public void paint(Graphics g)

  {

    // Строка, в которую будет записано содержимое

    // файла данных для круговой диаграммы

    String sChart = "<error>";

   

    // Начальный угол сектора диаграммы

    Integer AngleFromChart = new Integer(0);

   

    // Угол предыдущего сектора диаграммы

    int PrevAngle = 0;

    // Случайные компоненты цвета сектора

    int rColor, gColor, bColor;

    // Определяем текущие размеры окна аплета

    Dimension dimAppWndDimension = size();

   

    // Выбираем в контекст отображения желтый цвет

    g.setColor(Color.yellow);

   

    // Закрашиваем внутреннюю область окна аплета

    g.fillRect(0, 0,

      dimAppWndDimension.width  - 1,

      dimAppWndDimension.height - 1);

    // Выбираем в контекст отображения черный цвет

    g.setColor(Color.black);

    // Рисуем рамку вокруг окна аплета

    g.drawRect(0, 0,

      dimAppWndDimension.width  - 1,

      dimAppWndDimension.height - 1);

    // Проверяем, является ли полученное содержимое

    // текстовой строкой

    if(URLContent instanceof String)

    {

      sChart = (String)URLContent;

    }

   

    // Если нет, устанавливаем код ошибки, равный 3

    else

      errno = 3;

    // Если произошла ошибка, отображаем ее код

    // и полученные данные

    if(errno != 0)

      showStatus("errno: " + errno + ", sChart: " + sChart);


Содержание раздела