
- •Амурский государственный университет Факультет математики и информатики
- •Допущено учебно-методическим объединением (умо) вузов
- •Методические указания к лабораторной работе
- •1. Простейшее приложение Hello
- •2. Структура Java-программы
- •2.1 Переменные
- •2.1.1 Примитивные типы
- •2.1.2 Ссылочные типы
- •2.2 Методы
- •2.3 Классы
- •2.3.1 Статические и динамические элементы (модификатор static)
- •2.3.2 Модификаторы доступа
- •2.3.3 Наследование классов
- •2.3.4 Специальные переменные
- •2.4 Пакеты и импортирование
- •2.4.1 Использование пакетов
- •2.4.2 Создание пакетов
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Простейший апплет Hello
- •1.1 Апплет Неllo, управляемый мышью
- •2. Простейший апплет HelloApplet, созданный Java Applet Wizard
- •2.1 Создание шаблона апплета HelloApplet
- •2.2 Исходные файлы апплета HelloApplet
- •2.3 Упрощенный вариант исходного текста апплета HelloApplet
- •3. Аргументы апплета
- •3.1 Передача параметров апплету
- •3.2 Апплет, принимающий параметры
- •3.4 Двойная буферизация графического изображения
- •4. События и их обработка
- •4.1 Обработчики событий от мыши и клавиатуры
- •4.2 Обработка событий
- •4.3 Апплет, обрабатывающий события
- •4.4 Устранение мерцания при выводе, двойная буферизация
- •5. Апплеты двойного назначения
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Рисование в окне
- •1.1 Графика
- •1.2 Цвет
- •1.3 Шрифты
- •1.4 Приложение FontsList
- •2. Обработка событий
- •2.1 Как обрабатываются события
- •2.2 События от мыши
- •2.3 Приложение LinesDraw
- •2.4 События от клавиатуры
- •2.5 Приложение KeyCodes
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Компоненты gui
- •2. Устройства или элементы управления
- •2.1 Кнопки
- •2.2 Флажки (или переключатели)
- •2.3 Меню выбора (или выпадающие списки)
- •2.4 Раскрывающиеся списки
- •2.5 Полосы прокрутки
- •2.6 Метки
- •2.7 Текстовые компоненты
- •3. Приложение AllElements
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Контейнеры
- •1.1 Панели
- •1.2 Окна
- •1.3 Рамки, фреймы
- •2. Менеджеры размещения компонентов
- •2.1 Типы менеджеров размещения
- •3. Поведение контейнера при наличии элементов управления
- •4. Приложение PanelsDemo1
- •5. Приложение PanelsDemo2
- •6. Приложение WindowsDemo
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Методические указания к лабораторной работе
- •1. Процессы, задачи и приоритеты
- •2. Реализация многозадачности в Java
- •2.1 Создание подкласса Thread
- •2.2 Реализация интерфейса Runnable
- •2.3 Применение мультизадачности для анимации
- •2.4 Апплет двойного назначения, реализующий интерфейс Runnable
- •3. Потоки (нити)
- •3.1 Состояние потока
- •3.2 Исключительные ситуации для потоков
- •3.3 Приоритеты потоков
- •3.4 Группы потоков
- •4. Приложение VertScroller
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Автономные приложения. Потоки данных. Работа с локальными файлами (2 часа) методические указания к лабораторной работе
- •1. Самостоятельные графические приложения
- •2. Потоки ввода-вывода в Java
- •2.1. Обзор классов Java для работы с потоками
- •2.2 Стандартные потоки ввода-вывода
- •2.3 Потоки, связанные с локальными файлами
- •2.3.1 Создание потоков, связанных с локальными файлами
- •2.3.2 Запись данных в поток и чтение их из потока
- •2.3.3 Закрытие потоков
- •2.3.4 Принудительный сброс буферов
- •2.3.5 Приложение StreamDemo
- •2.4 Потоки в оперативной памяти
- •3 Работа с локальной файловой система
- •3.1 Работа с файлами и каталогами
- •3.2 Приложение DirList
- •3.3 Произвольный доступ к файлам
- •3.4 Просмотр локальной файловой системы
- •3.5 Приложение FileDialogDemo
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Сетевые приложения: передача данных с использованием сокетов (2 часа)
- •1. Сокеты
- •2. Протокол tcp/ip, адрес ip и класс InetAddress
- •3. Потоковые сокеты
- •3.1 Создание и использование канала передачи данных
- •3.2 Конструкторы и методы класса Socket
- •3.3 Пример использования потоковых сокетов
- •4. Датаграммные сокеты (несвязываемые датаграммы)
- •4.1 Конструкторы и методы класса DatagramSocket
- •4.3 Пример использования датаграммных сокетов
- •5 Приложения ServerSocketApp и ClientSocketApp
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Связь по сети с помощью url (2 часа) методические указания к лабораторной работе
- •1. Универсальный адрес ресурсов url
- •2. Класс java.Net.Url в библиотеке классов Java
- •3. Использование класса java.Net.Url
- •3.1 Чтение из потока класса InputStream, полученного от объекта класса url
- •3.2 Получение содержимого файла, связанного с объектом класса url
- •4. Соединение с помощью объекта класса urlConnection
- •5. Приложение Diagram
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Создание и использование сервлетов (2 часа) методические указания к лабораторной работе
- •1. Как устроен сервлет
- •2. Вспомогательные классы
- •3. Запуск и настройка сервлетов
- •4. Сервлет example, принимающий параметры
- •5. Сервлет, обрабатывающий запросы на основе методов cet и post
- •6. Сервлет MyselfInfo
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Работа с базами данных, использование интерфейса jdbc(2 часа) методические указания к лабораторной работе
- •1. Написание апплетов, сервлетов и приложений jdbc
- •1.1 Соединение с базой данных
- •1.2 Применение интерфейса DatabaseMetaData
- •1.3 Посылка статичных sql-запросов
- •1.4 Посылка параметризированных и частовыполняемых sql-запросов
- •1.5 Выборка результатов
- •1.6 Применение интерфейса ResultSetMetaData
- •1.7 Доступ к хранимым функциям и процедурам
- •1.8 Применение выходных параметров
- •2. Обработка исключений jdbc
- •3. Отладка приложений jdbc
- •4. Сервлет, работающий с информацией из базы данных
- •Задания к лабораторной работе
- •Контрольные вопросы
- •Приложение 1 java-файл простейшего апплета и html-документ со ссылкой на него
- •Приложение 2 java-файл апплета, принимающего параметры, и html-документ со ссылкой на него
- •Приложение 3 java-файл апплета, обрабатывающего простые события мыши, и html-документ со ссылкой на него
- •Приложение 4 java-файлы апплета двойного назначения и html-документ со ссылкой на него
- •Приложение 5 java-файлы апплета двойного назначения, обрабатывающего сообщения от мыши, и html-документ со ссылкой на него
- •Приложение 6 java-файл апплета двойного назначения, реализующего интерфейс runnable, и html-документ со ссылкой на него
- •Приложение 7 самостоятельное графическое java-приложение
1.1 Апплет Неllo, управляемый мышью
Класс Applet содержит большое количество методов, которые вызываются в ответ на действия пользователя (например, перемещение курсора мыши в пределах окна или нажатие определеннх клавиш на клавиатуре). Приведем в качестве примера использование метода mouseDown(), который вызывается каждый раз, когда пользователь в пределах области, занятой апплетом, нажимает левую клавишу мыши. Усовершенствованная программа Hello перерисовывает строчку текста в той точке, где пользователь щелкнул мышью.
/*------------- Пример 2. Файл Hello.java -------------*/
import java.applet.*;
import java.awt.*;
public class hello extends Applet
{ int curX=50, curY=50;
public void init()
{ resize(640,480);
}
public void paint(Graphics g)
{ g.drawString("Hello, WWW",curX,curY);
}
public boolean mouseDown(Event e,int x,int y)
{ curX=x; curY=y;
repaint();
return true;
}
}/*-----------------------------------------------------------*/
Следует обратить внимание, что в методе mouseDown() вызывается метод repaint(). Этот метод сообщает оболочке времени выполнения, что необходимо обновить изображение в окне. В ответ на это оболочка времени выполнения предает параметры экрана, содержащиеся в объекте типа Graphics, методу paint().
2. Простейший апплет HelloApplet, созданный Java Applet Wizard
Для создания шаблона апплета, на основе которого можно разрабатывать специализированные апплеты, можно воспользоваться системой автоматизированной разработки шаблонов апплета Java Аpplet Wizard, встроенной в JBuilder.
2.1 Создание шаблона апплета HelloApplet
Для создания шаблона апплета HelloApplet (пример 3) среде разработки JBuilder выбрать пункт “New” меню “File”. В появившейся диалоговой панели “Object Gallery” выбрать закладку “Web” и отметить тип “Аpplet”. В диалоговом окне “Applet Wizard” в поле “Class” следует ввести имя HelloApplet и нажать кнопку “Finish”.
В результате работы системы Java Applet Wizard будет создано два файла с исходными текстами: текст апплета (файл HelloApplet.java) и HTML-документ (файл HelloApplet.html).
2.2 Исходные файлы апплета HelloApplet
Рассмотрим тексты создаваемых файлов (комментарии, создаваемые Java Applet Wizard, переведены в данном примере на русский язык). Тексты подобных шаблонных файлов содержатся в Приложении 1 и их можно в дальнейшем использовать в качестве шаблонов апплета.
Пример 3. Файлы, созданные Java Applet Wizard
Листинг Java-файла:
******************************************************************
// HelloApplet.java: Applet
//
//*****************************************************************
import java.applet.*;
import java.awt.*;
//================================================
// Основной класс для апплета HelloApplet
//
//================================================
public class HelloApplet extends Applet
{
// Конструктор класса HelloApplet
//--------------------------------------------------------------------------
public HelloApplet()
{
// Сделать: Добавьте сюда код конструктора
}
// ОБЕСПЕЧЕНИЕ ИНФОРМАЦИИ ОБ АППЛЕТЕ:
// Метод getAppletInfo() возвращает строку, которая описывает
// апплет. Здесь можно привести такую информацию, как имя
// автора и дата создания, а также любую другую информацию
//--------------------------------------------------------------------------
public String getAppletInfo()
{
return "Name: HelloApplet\r\n" +
"Created with JBuilder";
}
// Метод init() вызывается системой при первой загрузке или
// перезагрузке апплета. Можно переопределить этот метод
// для выполнения необходимой инициализации апплета, например
// инициализации структур данных, загрузки изображений и
// шрифтов, создания окон фреймов, установки системы
// управления внешним видом или добавления элементов
// пользовательского интерфейса
//--------------------------------------------------------------------------
public void init()
{
// Если для размещения в окне апплета органов управления
// используется класс "control creator", созданный системой
// ResourceWizard, из метода init() можно вызвать метод
// CreateControls(). Следует удалить вызов метода resize()
// перед добавлением вызова метода CreateControls(),
// так как эта функция выполняет изменение размера
// окна апплета самостоятельно
//----------------------------------------------------------------------
resize(320, 240);
// Сделать: Добавьте сюда код инициализации
}
// Здесь можно разместить дополнительный код, необходимый
// для “чистого” завершения работы апплета. Метод destroy()
// вызывается, когда апплет завершает работу и будет
// выгружен из памяти
//-------------------------------------------------------------------------
public void destroy()
{
// Сделать: Добавьте сюда код завершения работы апплета
}
// Обработчик процедуры рисования окна апплета HelloApplet
//--------------------------------------------------------------------------
public void paint(Graphics g)
{
g.drawString("Created with JBuilder ",10, 20);
}
// Метод start() вызывается при первом появлении на экране
// страницы HTML с апплетом
//--------------------------------------------------------------------------
public void start()
{
// Сделать: Добавьте сюда код, который должен
// работать при запуске апплета
}
// Метод stop() вызывается, когда страница HTML с
// с апплетом исчезает с экрана
//--------------------------------------------------------------------------
public void stop()
{
// Сделать: Добавьте сюда код, который должен
// работать при остановке апплета
}
// Сделать: Добавьте сюда код, необходимый для работы
// создаваемого специализированного апплета
}
Листинг HTML-файла:
<html>
<head>
<title>HelloApplet</title>
</head>
<body>
<hr>
<applet
code=HelloApplet.class
name=HelloApplet
width=320
height=240 >
</applet>
<hr>
<a href="HelloApplet.java">The source.</a>
</body>
</html>
Исходный текст апплета начинается с двух строк, в которых с помощью оператора import подключаются библиотеки классов.
Далее в исходном тексте апплета определяется класс типа public с именем HelloApplet, которое должно совпадать с именем файла, содержащего исходный текст этого класса.
Создавая файл HelloApplet.java, система Java Applet Wizard определила на в классе HelloApplet конструктор и несколько методов, заменив некоторые методы суперкласса Applet.
Конструктор HelloApplet() класса HelloApplet вызывается при создании объекта. По умолчанию тело конструктора, создаваемого системой Java Applet Wizard, не содержит никакого кода. Однако можно добавить в него строки, выполняющие инициализацию апплета при его создании как апплета.
Базовый класс Applet содержит определение метода getAppletInfo(), возвращающего null. В классе HelloApplet, который является подклассом по отношению к классу Applet, метод getAppletInfo() переопределяется так, что теперь он возвращает текстовую информацию об апплете в виде строки класса String.
Метод init() также определен в класса Applet, от которого наследуются все апплеты (определенный в суперклассе, этот метод ничего не делает). Метод init() вызывается тогда, когда WWW-навигатор загружает в свое окно документ HTML с тегом <APPLET>, ссылающимся на данный апплет. В этот момент апплет может выполнить инициализацию, например создать задачи, если он работает в мультизадачном режиме.
В переопределенном системой Java Applet Wizard методе init() по умолчанию вызывается метод resize(), определенный в суперклассе. При помощи этого оператора изменяются размеры окна апплета, установленные в параметрах тега <APPLET>. При желании редактировать размеры окна апплета через тег <APPLET> документа HTML можно удалить вызов метода resize() из метода init().
Перед удалением апплета из памяти вызывается метод destroy() (метод, обратный методу init()), определенный в классе Applet как пустая заглушка. Система Java Applet Wizard добавляет в исходный текст класса HelloApplet переопределение метода destroy(), в котором можно выполнить все необходимые операции, выполняющиеся перед удалением апплета. Например, если в методе init() создавались какие-либо задачи, то в методе destroy() их можно завершить.
Метод start() вызывается после метода init() в тот момент, когда пользователь начинает просматривать документ HTML со встроенным в него апплетом. Система Java Applet Wizard создает заглушку, переопределяющую метод start() из суперкласса. Этот метод можно модифицировать, если при каждом посещении пользователем страницы с апплетом необходимо выполнять какую-либо инициализацию.
Обратным методу start() является метод stop(). Он вызывается, когда пользователь покидает страницу с апплетом и загружает в окно навигатора другую страницу. Этот метод вызывается перед вызовом метода destroy(). Метод stop(), переопределенный в классе HelloApplet можно дополнить кодом, который должен работать при остановке апплета.
Метод paint() выполняет рисование в окне апплета. Определение этого метода находится в классе java.awt.Component. Так как класс Applet является подклассом класса Component (см. иерархию классов апплетов), а класса HelloApplet - подклассом Applet, то метод paint() можно переопределить в классе HelloApplet.
Метод paint() вызывается, когда необходимо перерисовать окно апплета. Перерисовка окна апплета обычно выполняется асинхронно по отношению в работе апплета (подобно перерисовки клиентской части окон Windows-приложений при поступлении сообщения WM_PAINT). В любое время апплет должен быть готов перерисовать содержимое своего окна.
Методу paint() в качестве параметра передается ссылка на объект класса Graphics. По своему смыслу этот объект напоминает контекст отображения, который используется для вывода информации в Windows-окно. Контекст отображения - это как лист бумаги, на котором можно рисовать изображение или выводит текст. Многочисленные методы класса Graphics позволяют задавать различные параметры вывода, такие, например, как цвет или шрифт.
Для вывода изображения апплеты используют координатную систему, которая соответствует режиму MM_TEXT - одному из режимов, использующихся при программирование для Windows. Начало этой системы координат расположено в левом верхнем углу окна аплета, ось X направлена слева направо, а ось Y - сверху вниз.