В листинге 1.1 представлены исходные тексты мультизадачного приложения MultiTask, созданного системой автоматизированной разработки аплетов, слегка измененного и снабженного нашими комментариями. В дальнейшем мы создадим блее сложные мультизадачные аплеты.
Листинг 1.1. Файл MultiTask\MultiTask.java
// =========================================================
// Периодическое обновление окна аплета
// с использованием мультизадачности
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =========================================================
import java.applet.*;
import java.awt.*;
public class MultiTask extends Applet implements Runnable
{
// Задача, которая будет обновлять окно аплета
Thread m_MultiTask = null;
// -------------------------------------------------------
// MultiTask
// Конструктор класса MultiTask. Не используется
// -------------------------------------------------------
public MultiTask()
{
}
// -------------------------------------------------------
// getAppletInfo
// Метод, возвращающей строку информации об аплете
// -------------------------------------------------------
public String getAppletInfo()
{
return "Name: MultiTask\r\n" +
"E-mail: frolov@glas.apc.org" +
"WWW: http://www.glasnet.ru/~frolov" +
"Author: Alexandr Frolov\r\n" +
"Created with Microsoft Visual J++ Version 1.0";
}
// -------------------------------------------------------
// init
// Метод, получающий управление при инициализации аплета
// -------------------------------------------------------
public void init()
{
}
// -------------------------------------------------------
// destroy
// Метод, получающий управление при
// завершении работы аплета
Исходный файл приложения Rectangles приведен в листинге 1.3.
Листинг 1.3. Файл Rectangles\Rectangles.java
// =========================================================
// Рисование прямоугольников в отдельной задаче
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =========================================================
import java.applet.*;
import java.awt.*;
import java.util.*;
public class Rectangles extends Applet implements Runnable
{
// Ссылка на задачу рисования прямоугольников
Thread m_Rectangles = null;
// -------------------------------------------------------
// getAppletInfo
// Метод, возвращающей строку информации об аплете
// -------------------------------------------------------
public String getAppletInfo()
{
return "Name: Rectangles\r\n" +
"Author: Alexandr Frolov\r\n" +
"E-mail: frolov@glas.apc.org" +
"WWW: http://www.glasnet.ru/~frolov" +
"Created with Microsoft Visual J++ Version 1.0";
}
// -------------------------------------------------------
// 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);
}
Исходный текст приложения вы найдете в листинге 1.5.
Листинг 1.5. Файл MultiTask2\ MultiTask2.java
// =========================================================
// Рисование прямоугольников и эллипсов
// в разных задачах
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =========================================================
import java.applet.*;
import java.awt.*;
// =========================================================
// Основной класс аплета
// =========================================================
public class MultiTask2 extends Applet
{
// Ссылка на задачу рисования прямоугольников
DrawRectangles m_DrawRectThread = null;
// Ссылка на задачу рисования эллипсов
DrawEllipse m_DrawEllipseThread = null;
// -------------------------------------------------------
// getAppletInfo
// Метод, возвращающей строку информации об аплете
// -------------------------------------------------------
public String getAppletInfo()
{
return "Name: MultiTask2\r\n" +
"Author: Alexandr Frolov\r\n" +
"E-mail: frolov@glas.apc.org" +
"WWW: http://www.glasnet.ru/~frolov" +
"Created with Microsoft Visual J++ Version 1.0";
}
// -------------------------------------------------------
// paint
// Метод paint, выполняющий рисование в окне аплета
// -------------------------------------------------------
public void paint(Graphics g)
{
// Определяем текущие размеры окна аплета
Dimension dimAppWndDimension = size();
// Выбираем в контекст отображения желтый цвет
g.setColor(Color.yellow);
// Закрашиваем внутреннюю область окна аплета
g.fillRect(0, 0,
dimAppWndDimension.width - 1,
dimAppWndDimension.height - 1);
// Выбираем в контекст отображения черный цвет
Исходный текст приложения Scroller представлен в листинге 1.7.
Листинг 1.7. Файл Scroller\Scroller.java
// =========================================================
// Просмотр текста в режиме динамической свертки
// по вертикали
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =========================================================
import java.applet.*;
import java.awt.*;
public class Scroller extends Applet implements Runnable
{
// Ссылка на задачу, выполняющую свертку
Thread m_Scroller = null;
// Отображаемые строки
private String m_String1 = "Мы представляем наши новые книги";
private String m_String2 =
"Том 29. Сервер Web своими руками";
private String m_String3 =
"Том 30. Microsoft Visual J++. Создание приложений на языке Java. Часть 1";
private String m_String4 =
"Том 31. Разработка приложений для Internet с Visual C++ и MFC";
private String m_String5 =
"Том 32. Microsoft Visual J++. Создание приложений на языке Java. Часть 2";
private String m_String6 = "";
// Имена параметров
private final String PARAM_String1 = "String1";
private final String PARAM_String2 = "String2";
private final String PARAM_String3 = "String3";
private final String PARAM_String4 = "String4";
private final String PARAM_String5 = "String5";
private final String PARAM_String6 = "String6";
// -------------------------------------------------------
// getAppletInfo
// Метод, возвращающей строку информации об аплете
// -------------------------------------------------------
public String getAppletInfo()
{
return "Name: Scroller\r\n" +
"Author: Alexandr Frolov\r\n" +
"E-mail: frolov@glas.apc.org" +
Исходные тексты приложения HorzScroll приведены в листинге 1.9.
Листинг 1.9. Файл HorzScroll\HorzScroll.java
// =========================================================
// Рисование строки текста по буквам
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =========================================================
import java.applet.*;
import java.awt.*;
public class HorzScroll extends Applet implements Runnable
{
// Ссылка на задачу рисования строки текста
Thread m_HorzScroll = null;
// Значения параметров по умолчанию
private String m_Str = "Hello from Java!";
private String m_Fnt = "Helvetica";
private String m_style = "BOLD";
private int m_size = 12;
private String m_color = "red";
private int m_delay = 50;
// Имена параметров
private final String PARAM_str = "str";
private final String PARAM_font = "font";
private final String PARAM_style = "style";
private final String PARAM_size = "size";
private final String PARAM_color = "color";
private final String PARAM_delay = "delay";
// -------------------------------------------------------
// getAppletInfo
// Метод, возвращающей строку информации об аплете
// -------------------------------------------------------
public String getAppletInfo()
{
return "Name: HorzScroll\r\n" +
"Author: Alexandr Frolov\r\n" +
"E-mail: frolov@glas.apc.org" +
"WWW: http://www.glasnet.ru/~frolov" +
"Created with Microsoft Visual J++ Version 1.0";
}
// -------------------------------------------------------
// getParameterInfo
// Иинформация о параметрах
// -------------------------------------------------------
Исходные тексты приложения Synchro приведены в листинге 1.11.
Листинг 1.11. Файл Synchro\Synchro.javal
// =========================================================
// Демонстрация синхронизации двух задач
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =========================================================
import java.applet.*;
import java.awt.*;
// =========================================================
// Основной класс аплета
// =========================================================
public class Synchro extends Applet
{
// Ссылка на задачу рисования прямоугольников
DrawRectangles m_DrawRectThread = null;
// Ссылка на задачу, периодически разблокирующую задачу
// рисования прямоугольников
NotifyTask m_NotifyTaskThread = null;
// -------------------------------------------------------
// getAppletInfo
// Метод, возвращающей строку информации об аплете
// -------------------------------------------------------
public String getAppletInfo()
{
return "Name: Synchro\r\n" +
"Author: Alexandr Frolov\r\n" +
"E-mail: frolov@glas.apc.org" +
"WWW: http://www.glasnet.ru/~frolov" +
"Created with Microsoft Visual J++ Version 1.0";
}
// -------------------------------------------------------
// paint
// Метод paint, выполняющий рисование в окне аплета
// -------------------------------------------------------
public void paint(Graphics g)
{
// Определяем текущие размеры окна аплета
Dimension dimAppWndDimension = size();
// Выбираем в контекст отображения желтый цвет
g.setColor(Color.yellow);
// Закрашиваем внутреннюю область окна аплета
g.fillRect(0, 0,
dimAppWndDimension.width - 1,
dimAppWndDimension.height - 1);
Исходный текст аплета MemStream приведен в листинге 2.3.
Листинг 2.3. Файл MemStream\MemStream.java
// =========================================================
// Работа с потоками в оперативной памяти
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =========================================================
import java.applet.*;
import java.awt.*;
import java.io.*;
public class MemStream extends Applet
{
// Выходной поток
DataOutputStream OutStream;
// Входной поток
DataInputStream InStream;
// Строка, которая будет записана в поток
String sOut;
// Массив, в который будет копироваться содержимое
// выходного потока
byte[] bMemStream;
// -------------------------------------------------------
// getAppletInfo
// Метод, возвращающей строку информации об аплете
// -------------------------------------------------------
public String getAppletInfo()
{
return "Name: MemStream\r\n" +
"Author: Alexandr Frolov\r\n" +
"E-mail: frolov@glas.apc.org" +
"WWW: http://www.glasnet.ru/~frolov" +
"Created with Microsoft Visual J++ Version 1.0";
}
// -------------------------------------------------------
// init
// Метод init, получает управление при инициализации
// аплета
// -------------------------------------------------------
public void init()
{
// Инициализируем строку для записи в поток
sOut = "Hello, Java!";
try
{
// Создаем выходной поток в оперативной памяти
ByteArrayOutputStream baStream =
new ByteArrayOutputStream(255);
// Создаем буферизованный форматированный поток
// на базе потока baStream
OutStream = new DataOutputStream(
new BufferedOutputStream(baStream));
Исходные тексты приложения DirectFileAccess приведены в листинге 2.9.
Листинг 2.9. Файл DirectFileAccess\DirectFileAccess.java
// =========================================================
// Прямой доступ к файлу с помощью класса RandomAccessFile
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =========================================================
import java.io.*;
import java.util.*;
// =========================================================
// Класс DirectFileAccess
// Главный класс приложения
// =========================================================
public class DirectFileAccess
{
// -------------------------------------------------------
// main
// Метод, получающий управление при запуске приложения
// -------------------------------------------------------
public static void main(String args[])
{
// Массив для ввода строки с клавиатуры
byte bKbdInput[] = new byte[256];
try
{
// Создаем новую базу данных
SimpleDBMS db = new SimpleDBMS(
"dbtest.idx", "dbtest.dat");
// Добавляем в нее три записи
db.AddRecord("Ivanov", 1000);
db.AddRecord("Petrov", 2000);
db.AddRecord("Sidoroff", 3000);
// Получаем и отображаем содержимое первых трез
// записей с номерами 2, 1 и 0
System.out.println(db.GetRecordByNumber(2));
System.out.println(db.GetRecordByNumber(1));
System.out.println(db.GetRecordByNumber(0));
// Закрываем базу данных
db.close();
// После ввода любой строки завершаем работу программы
System.out.println("Press <Enter> to terminate...");
System.in.read(bKbdInput);
}
catch(Exception ioe)
{
System.out.println(ioe.toString());
}
}
Исходные тексты приложения ShowChart приведены в листинге 3.3.
Листинг 3.3. Файл ShowChart\ShowChart.java
// =========================================================
// Рисование круговой диаграммы, данные для которой
// получены от сервера Web через сеть
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =========================================================
import java.applet.*;
import java.awt.*;
import java.net.*;
import java.io.*;
import java.util.*;
public class ShowChart extends Applet
{
// Адрес URL файла с данными для круговой диаграммы
URL SrcURL;
// Содержимое этого файла
Object URLContent;
// Код ошибки
int errno = 0;
// -------------------------------------------------------
// getAppletInfo
// Метод, возвращающей строку информации об аплете
// -------------------------------------------------------
public String getAppletInfo()
{
return "Name: ShowChart\r\n" +
"Author: Alexandr Frolov\r\n" +
"E-mail: frolov@glas.apc.org" +
"WWW: http://www.glasnet.ru/~frolov" +
"Created with Microsoft Visual J++ Version 1.0";
}
// -------------------------------------------------------
// init
// Метод, получающий управление при инициализации аплета
// -------------------------------------------------------
public void init()
{
try
{
// Создаем объект класса URL для файла с данными
// для круговой диаграммы
SrcURL = new URL("http://frolov/chart.txt");
try
{
// Получаем содержимое этого файла
URLContent = SrcURL.openConnection().getContent();
}
catch (IOException ioe)
{
showStatus("getContent exception");
// При возникновении исключения во время получения
Исходный текст приложения ImageDraw вы найдете в листинге 4.1.
Листинг 4.1. Файл ImageDraw\ImageDraw.java
// =========================================================
// Рисование растровых изображений
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =========================================================
import java.applet.*;
import java.awt.*;
public class ImageDraw extends Applet
{
// Изображение флоппи-диска
Image FloppyDiskImg;
// Изображение компакт-диска
Image CDDiskImg;
// -------------------------------------------------------
// getAppletInfo
// Метод, возвращающей строку информации об аплете
// -------------------------------------------------------
public String getAppletInfo()
{
return "Name: ImageDraw\r\n" +
"Author: Alexandr Frolov\r\n" +
"E-mail: frolov@glas.apc.org" +
"WWW: http://www.glasnet.ru/~frolov" +
"Created with Microsoft Visual J++ Version 1.0";
}
// -------------------------------------------------------
// init
// Метод init, получает управление
// при инициализации аплета
// -------------------------------------------------------
public void init()
{
// Загружаем изображение флоппи-диска
FloppyDiskImg = getImage(getCodeBase(), "disk.gif");
// Загружаем изображение флоппи-диска
CDDiskImg = getImage(getCodeBase(), "cd.gif");
}
// -------------------------------------------------------
// paint
// Метод paint, выполняющий рисование в окне аплета
// -------------------------------------------------------
public void paint(Graphics g)
{
// Определяем текущие размеры окна аплета
Dimension dimAppWndDimension = size();
// Выбираем в контекст отображения белый цвет