Содержание

Слайд 2

Графический интерфейс

В Java применяются разные графические библиотеки:
AWT (Abstract Window Toolkit)
Swing
SWT
JavaFX

Графический интерфейс В Java применяются разные графические библиотеки: AWT (Abstract Window Toolkit) Swing SWT JavaFX

Слайд 3

AWT

AWT (Abstract Window Toolkit) — первая библиотека для работы с графикой, появилась

AWT AWT (Abstract Window Toolkit) — первая библиотека для работы с графикой,
еще в версии 1.0, и оказалась не совсем удачной.
Хоть она и была кроссплатформенной, AWT зависела от графической подсистемы.
Предполагалось, что компоненты будут выглядеть одинаково хорошо на разных платформах. На самом деле получилось, что все выглядит одинаково плохо и хуже того, по-разному.

Слайд 4

AWT

Разработчики оставили только те компоненты и только те функции, которые поддерживались во

AWT Разработчики оставили только те компоненты и только те функции, которые поддерживались
всех операционных системах.
В итоге получилась библиотека с очень урезанными возможностями. Компонентов было мало, при этом они поддерживали не все возможные функции.
Но зато эта библиотека работала для того времени довольно быстро.

Слайд 5

Swing

С версии 1.1 появилась библиотека Swing, сначала как отдельная библиотека, потом как

Swing С версии 1.1 появилась библиотека Swing, сначала как отдельная библиотека, потом
часть Java.
Основная особенность Swing в том, что почти все компоненты написаны на Java. Поэтому в принципе они должны выглядеть одинаково везде.
Однако из-за того, что компоненты нужно отрисовывать, все стало работать медленнее, чем было в AWT.
Потом была проведена работа над ускорением и сейчас правильно настроенный Swing работает достаточно быстро.

Слайд 6

Swing

Полезной особенностью Swing является изменяемый вид компонентов, который можно менять на ходу.

Swing Полезной особенностью Swing является изменяемый вид компонентов, который можно менять на

Не сказать, что Swing является самой удачной библиотекой, но изучить на его примере основные принципы вполне можно.

Слайд 7

SWT

Библиотека SWT появилась как часть Eclipse, ее разработку поддержала компания IBM.
SWT

SWT Библиотека SWT появилась как часть Eclipse, ее разработку поддержала компания IBM.
есть не для всех платформ, но при ее создании разработчики удачно соединили лучшее из AWT и Swing.
В SWT компоненты и их функции, которые поддерживаются графической подсистемой, как и в AWT работают через адаптеры, а недостающие функции, как в Swing, дописаны на Java.

Слайд 8

JavaFX

JavaFX изначально позиционировалась как новая графическая библиотека, с поддержкой анимации, визуальных эффектов,

JavaFX JavaFX изначально позиционировалась как новая графическая библиотека, с поддержкой анимации, визуальных
возможностью задания интерфейса с помощью XML, поддержки стилей.
Сначала JavaFX была отдельной библиотекой, потом стала частью Java, сейчас снова выделена в отдельной проект под названием OpenJFX.

Слайд 9

JavaFX

Новая библиотека для разработки RIA (Rich Internet Applications)
Поддержка XML для создания

JavaFX Новая библиотека для разработки RIA (Rich Internet Applications) Поддержка XML для
интерфейса
Поддержка стилей CSS
Поддержка 2D- и 3D-графики
Легковесные компоненты
Интеграция с библиотекой Swing

Слайд 10

Создание графических приложений

Создание основного окна
Создание остальных элементов интерфейса
Размещение элементов интерфейса в

Создание графических приложений Создание основного окна Создание остальных элементов интерфейса Размещение элементов
иерархии контейнеров
Обеспечение реакции элементов на события
Все заработало!

Слайд 11

JavaFX

Основной класс для приложений JavaFX - Application. Это класс-предок всех приложений.
Для

JavaFX Основной класс для приложений JavaFX - Application. Это класс-предок всех приложений.
написания своего приложения просто наследуемся от Applicaiton. У этого класса есть четыре основных метода:
init() - для инициализации, обычно туда помещается код, который задает начальные значения.
stop() освобождает ресурсы, вызывается при закрытии приложения.
абстрактный метод start(). В нем должен быть весь код приложения. Методу старт передается объект класса Stage, создавать этот объект не надо.
launch() запускает приложение. Этому методу можно передать аргументы

Слайд 12

JavaFX

Stage — основная платформа
Контейнер верхнего уровня
Предоставляется системой при запуске приложения

JavaFX Stage — основная платформа Контейнер верхнего уровня Предоставляется системой при запуске

Обеспечивает связь с графической подсистемой ОС
Основные методы:
setTitle(String)
setScene(Scene)
show()

Слайд 13

JavaFX

Scene — контейнер для элементов сцены
Должен быть хотя бы один объект

JavaFX Scene — контейнер для элементов сцены Должен быть хотя бы один
класса Scene
Элементы сцены — узлы (Node)
Узлы образуют граф (scene graph)
Граф включает не только контейнеры и компоненты, но также графические примитивы (текст и графические примитивы)
Узел с дочерними узлами — Parent (extends Node)
Корневой узел (root node) — узел без родительского узла
Scene sc = new Scene(root node,300,150);

Слайд 14

JavaFX

Класс Node - узел. Его свойства (properties):
String id
Parent (только один)
Scene

JavaFX Класс Node - узел. Его свойства (properties): String id Parent (только

Стиль (styleClass, style)
Видимость, активность, прозрачность
Размеры (min, max, preferred)
Границы (boundsInLocal, boundsInParent, layoutBounds)
Трансформации (сдвиг, вращение, масштаб, наклон)
Эффекты
События (mouse, key, drag, touch, rotate, scroll, swipe, zoom)

Слайд 15

Основные компоненты JavaFX

Основные компоненты JavaFX

Слайд 16

Многопоточные приложения в Java

Многопоточные приложения в Java

Слайд 17

Многопоточность

Многопоточность операционной системы – возможность одновременного выполнения более чем одной программы.
Число одновременно

Многопоточность Многопоточность операционной системы – возможность одновременного выполнения более чем одной программы.
выполняющихся процессов не ограничено количеством процессоров.
Многопоточные программы расширяют идею многозадачности. Индивидуальные приложения могут выполнять множество задач в одно и то же время.
Каждая задача называется потоком – thread.

Слайд 18

Многопоточность

Процесс — это экземпляр программы, который запускается независимо от остальных, у него есть

Многопоточность Процесс — это экземпляр программы, который запускается независимо от остальных, у
собственное адресное пространство.
Поток – это одна из веток процесса. Все потоки разделяют адресное пространство породившего их процесса и имеют доступ к одним данным.
Один из потоков – «главный» начинает выполняться первым при запуске Java-программы. Главный поток создается автоматически с именем main и приоритетом 5 по умолчанию.
От него порождаются дочерние потоки.

Слайд 19

Многопоточность

Многопоточность

Слайд 20

Многопоточность

Существенная разница между многими процессами и многими потоками заключается в следующем:
каждый процесс

Многопоточность Существенная разница между многими процессами и многими потоками заключается в следующем:
имеет собственный набор переменных, потоки могут разделят одни и те же данные.
Потоки являются более «легковесными», чем процессы.
Пример многопоточных приложений – браузер, web-сервер, программы с графическим пользовательским интерфейсом.

Слайд 21

Процедура запуска задачи в отдельном потоке

Класс Thread предназначен для создания нового потока.
Он

Процедура запуска задачи в отдельном потоке Класс Thread предназначен для создания нового
определяет следующие основные конструкторы :
Thread()
Thread(Runnable object)
Thread(Runnable object, String name)
Thread(String name)
где name - имя, присваиваемое потоку, object - экземпляр объекта Runnable .
Если имя не присвоено, система сгенерирует уникальное имя в виде Thread-N, где N - целое число. Для создания потока можно использовать также интерфейс Runnable
public interface Runnable { public abstract void run(); }

Слайд 22

Прерывание потоков

Поток прерывается, когда его метод run() возвращает управление, выполнив оператор return,

Прерывание потоков Поток прерывается, когда его метод run() возвращает управление, выполнив оператор
после последнего оператора или в случае возникновения исключения.
Для принудительного прерывания вызовом метода interrupt() выставляется статус прерывания (interrupted status). Каждый поток периодически проверяет этот статус.
Для проверки установки статуса прерывания применяется статический метод isInterrupted():

Слайд 23

Прерывание потоков

Если поток блокирован, то он не может проверить статус прерывания.
Когда метод

Прерывание потоков Если поток блокирован, то он не может проверить статус прерывания.
interrupt() вызывается для потока, который заблокирован таким вызовом как sleep() или wait(), то блокирующий вызов прерывается исключением InterruptedException.

public void run(){
try{…
while(еще есть работа){
Выполнять работу;
Thread.sleep(delay);}
}
catch(InterruptedException e){ поток прерван во время ожидания}
finally{при необходимости что-то сделать}
}

Слайд 24

Прерывание потоков

Не игнорируйте InterruptedException! Необходимо поступить одним из двух способов:
Выставьте флаг прерывания
catch(InterruptedException

Прерывание потоков Не игнорируйте InterruptedException! Необходимо поступить одним из двух способов: Выставьте
e) {Thread().currentThread().interrupt();}
Или предупредите метод о возможном исключении через throws InterruptedException

Слайд 25

Состояние потока

Существует 6 состояний потока.
Новый. Как только поток был создан операцией new,

Состояние потока Существует 6 состояний потока. Новый. Как только поток был создан
он находится в состоянии “новый”.
Работоспособный. Как только вызывается метод start, поток оказывается в работоспособном состоянии. Работоспособный поток может в данный момент выполняться, а может и нет (зависит от ОС, поэтому он не называется работающим).

Слайд 26

Состояние потока

Когда поток заблокирован или находится в состоянии ожидания, он временно не

Состояние потока Когда поток заблокирован или находится в состоянии ожидания, он временно
активен. Он не выполняет никакого кода, потребляет минимум ресурсов.
Блокированный. Когда поток пытается получить внутренний объект блокировки, он становится блокированным. Поток разблокируется, когда все остальные потоки освобождают объект блокировки и планировщик потоков позволяет захватить его.
Ожидание. Когда поток ожидает другого потока для уведомления планировщика о наступлении некоторого условия, он входит в состояние ожидания. Разница между блокированным и ожидающим на практике не велика.

Слайд 27

Состояние потока

Временное ожидание. Поток входит в это состояние вызовом некоторых методов, имеющих

Состояние потока Временное ожидание. Поток входит в это состояние вызовом некоторых методов,
параметр таймаута.
Завершенный поток. Поток завершается по одной из следующих причин:
при нормальном выходе из run()
неперехваченное исключение прерывает метод run()
Можно уничтожить поток, вызвав метод stop(), который генерирует ошибку ThreadDeath. Но данный метод не рекомендуется к использованию.

Слайд 28

Состояние потока

Состояние потока

Слайд 29

Свойства потока. Приоритет

Поток наследует приоритет потока, который его создал.
Метод setPriority() устанавливает приоритет

Свойства потока. Приоритет Поток наследует приоритет потока, который его создал. Метод setPriority()
между MIN_PRIORITY (равен 1) и MAX_PRIORITY (равен 10). NORM_PRIORITY равен 5.
Когда планировщик потоков выбирает поток для выполнения, он предпочитает потоки с более высоким приоритетом (вытесняющее планирование).
Приоритеты потоков в значительной мере зависимы от системы. В Windows 7 приоритетов, в Sun – приоритеты игнорируются!

Слайд 30

Потоки-демоны

Обычный поток можно превратить в поток-демона вызовом метода setDemon(true).
Демон – поток, основное

Потоки-демоны Обычный поток можно превратить в поток-демона вызовом метода setDemon(true). Демон –
назначение которого - служить другим.
Примеры – поток таймера, отсчитывающего тики, очистка кэша…