Метод вызывается при первом отображении
// -------------------------------------------------------
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);
Содержание раздела