
- •Учебно-методическое пособие
- •V курса заочной формы обучения автф
- •Предисловие
- •Глава 1. Основы программирования на java. Создание простейших приложений и апплетов в netbeans 7.0
- •Инструментальная среда разработки программ на Java
- •Использование среды NetBeans 7.0
- •Структура Java-программы
- •Переменные
- •Примитивные типы. Всего в Java определено восемь примитивных типов: int (4b), short (2b), byte (1b), long (8b), float (4b), double (8b), boolean (true, false), char (2b).
- •Модификаторы доступа. Модификаторы доступа используются для управления доступностью элементов класса из других частей программы (в других классах).
- •Наследование классов
- •Специальные переменные
- •Пакеты и импортирование Классы являются основными строительными блоками любой Java-программы. Пакеты содержат в себе наборы классов (а также исключения и интерфейсы).
- •Импортирование пакетов. Существует ряд способов доступа к классам в пакетах, основным из которых является импортирование пакета в начале программ:
- •Создание пакетов. Для создания пакета (т.Е. Добавления класса в пакет) в первой строке программы указывается следующее предложение:
- •Апплеты
- •События и их обработка
- •Апплеты двойного назначения
- •Практические задания
- •Вопросы для самопроверки
- •Глава 2. Обработка событий. Графика. Графика в Java
- •Цвет. Для задания текущего цвета используется метод setColor() класса Graphics. Создадим случайный цвет и установим его, g - объект Graphics:
- •Модель делегирования событий в Java 1.1
- •1. Пример обработки события с использованием реализации интерфейса.
- •2. Пример обработки события с использованием вложенных классов, наследующих классы-адаптеры.
- •3. Пример обработки события с использованием вложенного анонимного класса.
- •Графика 2d
- •Вероятностный подход
- •Практические задания
- •Вопросы для самопроверки
- •Глава 3: разработка графического интерфейса программы Библиотека графических компонент awt
- •Флажки (или переключатели). Язык Java поддерживает два типа флажков-переключателей: неисключающие (класс jCheckBox) и исключающие (класс jRadioButton).
- •Комбобоксы (или выпадающие списки). Класс jComboBox дает возможность создавать список элементов выбора, который всплывает на экране в виде меню.
- •Контейнеры
- •Менеджеры размещения компонентов
- •Практические задания
- •Вопросы для самопроверки
- •Глава 4. Классы-коллекции
- •Интерфейс Collection. Интерфейс Collection из пакета java.Util описывает общие свойства коллекций List и Set. Он содержит методы добавления и удаления элементов, проверки и преобразования элементов:
- •Классы, наследующие интерфейс List. Класс ArrayList очень похож на класс Vector, имеет тот же набор методов и может использоваться в тех же ситуациях.
- •Сравнение элементов коллекций.
- •Классы, создающие множества. Класс HashSet полностью реализует интерфейс Set и итератор типа Iterator. Класс HashSet используется в тех случаях, когда надо хранить только одну копию каждого элемента.
- •Практические задания
- •Вопросы для самопроверки
- •Глава 5. Многопотоковые приложения Процессы, потоки и приоритеты
- •Реализация многозадачности в Java
- •Создание подкласса Thread. При использовании этого способа для потоков определяется отдельный класс, например:
- •Применение анимации для мультизадачности
- •Состояние потока
- •Программирование движения объекта
- •Практические задания
- •Вопросы для самопроверки
- •Глава 6. Потоки данных. Работа с локальными файлами Организация ввода-вывода в Java
- •Классы потоков ввода-вывода
- •Иерархия классов потоков ввода-вывода
- •Консольный ввод/вывод. Для вывода на консоль используется метод println() класса PrintStream. Вместо System.Out.Println(), то вы можете определить новую ссылку на System.Out, например:
- •Каналы обмена информацией. В пакете java.Io есть четыре класса Pipedxxx, организующих обмен информацией между потоками - Thread.
- •Файловые диалоги. При работе с файлами часто требуются стандартные файловые диалоги. Библиотека Swing предлагает класс jFileChooser для реализации этого функционала.
- •Практические задания
- •Вопросы для самопроверки
- •Глава 7. Сетевые приложения «клент-сервер» Сетевые средства
- •Работа по протоколу tcp
- •Работа по протоколу udp
- •Практические задания
- •Вопросы для самопроверки
- •Глава 8. Generic-классы в java
- •Практические задания
- •Вопросы для самопроверки
Применение анимации для мультизадачности
Одним из наиболее распространенных применений апплетов является создание анимационных эффектов типа бегущей строки, мерцающих огней и других эффектов, привлекающих внимание пользователя. Для достижения таких эффектов необходим механизм, позволяющий выполнять перерисовку всего окна апплета или его части периодически с заданным интервалом. Перерисовка окна апплета выполняется методом paint(), который вызывается виртуальной машиной Java асинхронно по отношению к выполнению другого кода апплета, если содержимое окна было перекрыто другими окнами. Для периодической перерисовки окна апплета необходимо создание потока (или нескольких потоков), которые будут выполнять рисование в окне апплета асинхронно по отношению к коду апплета. Например, можно создать поток, который периодически обновляет окно апплета, вызывая для этого метод repaint(), или рисовать из потока непосредственно в окне апплета. Также можно использовать класс таймера (этот механизм уже использовался в предыдущих работах). Таймер, по сути, тоже является потоком, выполняющимся параллельно с основным.
Рассмотрим пример апплета 5.3, который умеет сам себя перерисовывать при помощи дополнительного потока.
Пример 5.3. Самоперерисовывающийся апплет
public class MainApplet extends JApplet implements Runnable {
boolean m_isGoing = false;
@Override
public void run() {
while (m_isGoing) {
repaint();
try{ Thread.sleep(500); }
catch(InterruptedException e) { stop(); }
}
}
@Override
public void start() {
super.start();
// Запускаем поток
m_isGoing = true;
new Thread(this).start();
}
@Override
public void stop() {
super.stop();
// Останавливаем потоки
m_isGoing = false;
// Дадим потоку время завершиться
try{ Thread.sleep(500); }
catch(InterruptedException e) {}
}
public void paint(Graphics g) {
int w = this.getWidth(), h = this.getHeight();
g.setColor(new Color((int)(Math.random() * 255),
(int)(Math.random() * 255), (int)(Math.random() * 255)));
g.fillRect(0, 0, w, h);
}
public static void main(String[] args) { }
}
Класс Thread содержит несколько конструкторов и большое количество методов для управления потоков.
Некоторые методы класса Thread:
currentThread() - возвращает ссылку на выполняемый в настоящий момент объект класса Thread;
sleep() - переводит выполняемый в данное время поток в режим ожидания в течение указанного промежутка времени ;
start() - начинает выполнение потока. Это метод приводит к вызову соответствующего метода run();
run() - фактическое тело потока. Этот метод вызывает после запуска потока;
stop() - останавливает поток (устаревший метод);
isAlive() - определяет, является ли поток активным (запущенным и не остановленным);
suspend() - приостанавливает выполнение потока (устаревший метод);
resume() - возобновляет выполнение потока (устаревший метод). Этот метод работает только после вызова метода suspend();
setPriority() - устанавливает приоритет потока (принимает значение от MIN_PRIORITY до MAX_PRIORITY);
getPriority() - возвращает приоритет потока;
wait() - переводит поток в состояние ожидания выполнения условия, определяемого переменной условия;
join() - ожидает, пока данный поток не завершит своего существования бесконечно долго или в течении некоторого времени;
setDaemon() - отмечает данный поток как поток-демон или пользовательский поток. Когда в системе останутся только потоки-демоны, программа на языке Java завершит свою работу;
isDaemon() - возвращает признак потока-демона.