44
1 Новые возможности Desktop Java Игорь Некрестьянов Sun Microsystems 1

Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

1

Новые возможности Desktop JavaИгорь НекрестьяновSun Microsystems

1

Page 2: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

2

Java SE 6, Update 10

Consumer JREProject Hamburg

Java SE 6, Update X

Java SE 6, Update N

• Нетипичный update release• Большой шаг вперед в области desktop Java

Page 3: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

3

План• UI

> Nimbus Look and Feel> Непрямоугольные прозрачные окна

• Апплеты и Webstart> Новый Java плагин> JNLP апплеты> Deployment Toolkit

• Время старта Java приложений> Java Kernel> Java Quick Starter

• Вопросы

Page 4: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

4

Metal

Page 5: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

5

Nimbus: новый LAF

Page 6: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

6

Nimbus: обзор• Основан на

> Synth> Векторной графике

– Масштабируемые компоненты> “декораторах” (painters)

– Дает возможность переопределить любое поведение LAF• Кросплатформенный• Расширяемый и настраиваемый

> Брендинг: цветовые темы, скины, расширения• Не включен по умолчанию

Page 7: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

7

Пример использования Nimbusfor (LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels() { if (“Nimbus”.equals(laf.getName())) { UIManager.setLookAndFeel(laf.getClassName()); }}

UIManager.setLookAndFeel( “com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel”);

Почему не просто:

• В Java 7 ...> Nimbus будет перенесен в javax.swing.plaf.nimbus> Пакеты java.* не могут изменяться в обновлениях

• Пользователь может использовать runtime без Nimbus

Page 8: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

8

Масштабируемые компоненты

Пример использования:JButton btn = new JButton(“Click Me”);btn.putClientProperty("JComponent.sizeVariant","large");

Page 9: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

9

Цветовые темы

Перед установкой LAF: UIManager.put("nimbusBase",new Color(...)); UIManager.put("nimbusBlueGrey", new Color(...)); UIManager.put("control", new Color(...));

Page 10: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

10

Векторность• Все компоненты Nimbus - векторные• Отсутствие картинок

> Делает Nimbus пригодным для окружений с высоким dpi> Облегчает брендинг (например, цветовые схемы)

• Кеширование для повышения производительности> отрисованных кусочков, как картинок> медленее Metal LAF, быстрее Windows LAF

– разница не принципиальна• “Умное” масштабирование

> Разные части компоненты могут масштабироваться по разному

> Метод “9-квадратов”

Page 11: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

11

Пример: масштабирование растрового изображения

Page 12: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

12

Пример: масштабирование векторного изображения

Page 13: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

13

Умное масштабирование: JComboBox

Углы не надо масштабировать с тем же коэффициентом, что и все остальное. Это влияет на восприятие формы фигуры!

Page 14: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

14

Декораторы

• Отрисовка компонент делегируется декораторам> Простой интерфейс, без состояния

• Можно заменить любой декоратор для любого региона любого объекта в любом состоянии

• Пример: Button[Enabled].backgroundPainter> Декоратор, используемый JButton в состоянии enabled> Выставляется через UIDefaults

• Не надо расширять компоненту или использовать UIDelegate!

public interface Painter { public void paint(Graphics2D g, JComponent c, int width, int height);}

Page 15: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

15

Cкины: это просто

Page 16: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

16

Скин для JSpinner (1)UIDefaults sliderDefaults = new UIDefaults();sliderDefaults.put("Slider.thumbWidth", 20);sliderDefaults.put("Slider.thumbHeight", 20);sliderDefaults.put( "Slider:SliderThumb.backgroundPainter", thumbBackgroundPainter);

Page 17: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

17

Скин для JSpinner (2)thumbBackgroundPainter = new Painter() { public void paint(Graphics2D g, JComponent c, int w, int h) { g.setRenderingHint( KEY_ANTIALIASING, VALUE_ANTIALIAS_ON); g.setStroke(new BasicStroke(2f)); g.setColor(Color.RED); g.fillOval(1, 1, w-3, h-3); g.setColor(Color.WHITE); g.drawOval(1, 1, w-3, h-3); }});

Page 18: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

18

Скин для JSpinner (3)JSlider slider = new JSlider(0, 100, 50);slider.putClientProperty( "Nimbus.Overrides",sliderDefaults);slider.putClientProperty( "Nimbus.Overrides.InheritDefaults",false);

Page 19: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

19

Прозрачные окна• Полупрозначность

> Применима к java.awt.Windows

• Разновидности> Единая для окна> Разная для разных пикселов

• Прозрачные и для событий!• Поддержка зависит от платформы

> AWTUtilities.isTranslucencySupported()• Примеры и подробности

http://java.sun.com/developer/technicalArticles/GUI/translucent_shaped_windows/

Page 20: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

20

Непрямоугольные окна• Форма задается Shape

> void setWindowShape( Window window, Shape shape)

• Ограничения> Только для окон без

декораций> Не в полноэкранном режиме> (Пока) не public API

– com.sun.awt.AWTUtilities

• Примеры и подробностиhttp://java.sun.com/developer/technicalArticles/GUI/translucent_shaped_windows/

Page 21: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

21

Демонстрация● Чтобы увидеть новые возмоности требуется установленный JRE 6 update 10!● http://javafx.com/releases/preview1/demos/SwirlingSquares/launch.jnlp● http://download.java.net/javadesktop/laffy/Laffy.jnlp● http://download.java.net/javadesktop/swingset3/SwingSet3.jnlp

Page 22: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

22

План• UI

> Nimbus Look and Feel> Непрямоугольные прозрачные окна

• Апплеты и Webstart> Новый Java плагин> JNLP апплеты> Deployment Toolkit

• Время старта Java приложений > Java Kernel> Java Quick Starter

• Вопросы

Page 23: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

23

Java plugin: проблемы• Работает в процессе броузера

> Падение JRE => падение броузера> Только одна версия JRE может работать в один момент

времени> Разработчик апплета не может выбрать версию JRE> Разработчик не имеет контроля над параметрами JVM> Броузер “висит” пока JRE стартует

Page 24: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

24

Новый Java plugin: обзор

Только небольшой кусочек кода на стороне броузера

Page 25: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

25

Новый Java plugin: детали• Апплеты выполняются вне процесса броузера

> Апплет не может вызвать падение броузера> Можно выбирать версию JRE> Можно передавать параметры VM> Может быть >1 процесса, в которых исполняются апплеты

• Работает в защищенном режиме IE на Vista• JNLP описания для апплетов

> Такой же как для Webstart> Доступ к JNLP сервисам> Возможность использовать “платформенные” библиотеки

• Улучшенное взаимодествие Java<=>Javascript• Требует Firefox 3 или IE 7

Page 26: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

26

Пример апплета с JNLP

• jnlp_href связывает Веб страницу и JNLP• Фиксированные правила предпочтений для

дублирующейся информации> Параметры VM всегда из JNLP> width/height всегда из описания апплета

• Старая версия плагина игнорирует jnlp_href> Новый плагин игнорирует обычное описание, если есть jnlp_href> Решение для обеспечения обратной совместимости

<applet width=”500” height=”500”> <param name=”jnlp_href” value=”my_applet.jnlp”> <param name=”separate_jvm” value=”true” /></applet>

Page 27: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

27

Новый Java plugin: советы• Избегайте рестартов VM

> VM, используемая для разбора JNLP может не подходить для запуска самого приложения

> Используйте параметры апплета для того, чтобы запустить подходящий VM<param name=”java_arguments”value=”-Xmx128m -Dsun.java2d.opengl=true”>

• Часть параметров VM может передавать только код, которому доверяют> Подписывайте JNLP и апплет

• Фоновая проверка обновлений> <update check=”background”>> Запуск, используя кешированную версию> Обновления будут использованы при следующем запуске

Page 28: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

28

Демонстрация●Чтобы увидеть новые возмоности требуется установленный JRE 6 update 10!● http://download.java.net/javadesktop/plugin2/wwj/ Использование OpenGL для анимации, Javascript <-> Java взаимодействие ● http://download.java.net/javadesktop/plugin2/jake2/ Quake в апплете● http://java.sun.com/developer/technicalArticles/javase/6u10_applets/ Простые draggable апплеты● Видео от демо на JavaOne 2008 http://java.sun.com/javaone/sf/media_shell.jsp?id=sgs2 (после 58 минуты)

Page 29: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

29

Draggable-апплеты• Апплет – это приложение, которое может работать как

внутри, так и вне броузера• Использование

> <param name=”draggable” value=”true”>> Alt + Left-click + Drag

• По умолчанию, апплет оборачивается в Frame или JFrame> Без декораций и прозрачный

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

• Дополнительные возможности у апплета– appletDragStarted()– isAppletDragStarted(MouseEvent e);– setAppletCloseListener(ActionListener l);

• Экспериментальная функциональность

Page 30: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

30

Deployment Toolkit• Типичные задачи на этапе развертывания

> Получить информацию о доступных версиях JRE> Установить JRE> Инициировать обновление JRE> Запуск апплетов и Webstart приложений

• Получить ответы непросто => многие апплеты не используют новые возможность> JDK 1.1 API, для совместимости со старыми JRE (MS VM)

• Deployment Toolkit - стандартный механизм, упрощающий процесс развертывания> JavaScript API: http://java.com/js/deployJava.js

Page 31: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

31

Пример

<script src=“http://java.com/js/deployJava.js”></script><script> deployJava.runApplet({ codebase:'http://www.mycompany.com/java/', archive:'myapplet.jar', code:'Main.class', width:400, height:300}, null, “1.4”);</script>

• Проверяет, что установлен JRE 1.4 или новее, а потом запускает апплет

• Если подходящего JRE нет, инициирует его установку

Page 32: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

32

Deployment Toolkit (2)• Ограничения чистого JavaScript решения

> Обнаруживает только самую свежую JRE> С точностью до основной версии (1.5, но не 1.5.0_11)> Установка JRE не совсем прозрачна

– В худшем случае redirect на страницу установки JRE– Зависит от платформы, броузера и того что уже

установлено• Решение: платформо-зависимые плагины

> ActiveX/Mozilla> Часть Java 6u10> Более точные результаты> Работает с множеством установленных версий JRE> API тот же самый

Page 33: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

33

Дополнительные бонусы• Возможность использовать сжатие pack200 для

апплетов и JNLP без настройки на стороне сервера• Поддержка версий для JNLP без настройки на стороне

сервера

Page 34: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

34

План• UI

> Nimbus Look and Feel> Непрямоугольные прозрачные окна

• Апплеты и Webstart> Новый Java плагин> JNLP апплеты> Deployment Toolkit

• Время старта Java приложений> Java Kernel> Java Quick Starter

• Вопросы

Page 35: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

35

Медленный запуск Java приложений• Типичные проблемы

> Установка JRE занимает много времени> Запуск первого Java приложения после перегрузки

машины очень медленный> Если это запуск из броузера, то броузер “висит”

Page 36: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

36

Размер JRE• Новые возможности => естественный рост JRE

Size in MB0

1

2

3

4

5

6

7

8

9

10

11

12

Java 1.1Java 1.2Java 1.3Java 1.4Java 5Java 6

Page 37: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

37

Java Kernel• Далеко не весь JRE нужен всем приложениям

> SQL, RMI, CORBA, XSLT, ...> Для большинства программ нужно <50% JRE

• Модуляризация> Core: VM + минимальный набор библиотек> Установка по требованию> Установка в фоновом режиме> Итоговый результат идентичен полной установке JRE> Есть возможность указать список требуемых

компонент с помощью Deployment API– Ограниченная применимость

Page 38: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

38

Эффект от Java Kernel

Page 39: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

39

Время запуска JRE• Время запуска приложения

> Холодный запуск: JRE необходимо считать с диска> Теплый запуск: JRE в памяти (буфере ОС)

• Теплый запуск довольно быстр (0.1-0.2с)• Холодный старт = Чтение с диска + Теплый старт

> JRE большой> Диски медленные

• Оптимизация JRE не решает проблему принципиально

Page 40: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

40

Решение: Java Quick Starter• Фоновый процесс, периодически читающий важные части

JRE> JRE остается в дисковом кеше> Запуск Java приложений значительно ускоряется

• Не то же самое, что и “запущенный JVM”> Не потребляет память по настоящему

– Если ОC требуется, то она освободит буфер– Если свободной памяти мало, то JQS автоматически остановится– На ноутбуках, работающих от батареи, JQS отключается

• Не универсальное решение> Но помогает в большинстве случаев

Page 41: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

41

Демонстрация● Просто попробуйте установить Java Kernel сами (со страницы jre 6 update 10)

● Пока этот релиз не вышел используйтеhttps://jdk6.dev.java.net/6u10ea.html

Page 42: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

42

И это еще не все!• Использование средств Windows для растеризации текста• Новый графический конвейер Java2D на основе Direct3D 9

> Аппаратное ускорение: градиенты, геометрические фигуры в AA, BufferedImageOps, alpha compositing, рисование трансформированных объектов и т.д.

• Улучшенный механизм установки обновлений и инсталятор • Новый security warning banner• Множество других улучшений и исправлений

Попробуйте самиhttps://jdk6.dev.java.net/6u10ea.html

Page 43: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

43

?Вопросы

Page 44: Новые возможности Desktop Java · 2 Java SE 6, Update 10 Consumer JRE Project Hamburg Java SE 6, Update X Java SE 6, Update N • Нетипичный update release

44

Новые возможности Desktop JavaИгорь НекрестьяновSun Microsystems

44