Программирование мобильных телефонов на Java

         

с основами программирования на Java.



Прежде чем мы приступим к знакомству с платформой Java 2 ME, следует определиться с основами программирования на Java. Эта и все дальнейшие главы рассчитаны на пользователя, имеющего самые минимальные представления о языке программирования Java. Если вы не относите себя к таковым, то перейдите в конец книги к приложению 1 и ознакомьтесь с основами языка Java. Информации присутствующей в приложении, будет достаточно для прочтения этой книги.

История языка программирования Java насчитывает более десяти лет. Вначале, при создании Java, планировалось использовать этот язык для программирования микроконтроллеров бытовых устройств. Поэтому язык Java, тогда он, правда, имел другое название, изначально создавался независимым от архитектуры, компактным и безопасным, что в последствии сыграло решающую роль в его широком распространении. Однако, в тот момент язык программирования Java не смог обрести популярности. Более того, он оказался совершенно невостребованным. И только благодаря появлению сети World Wide Web, язык программирования Java получил настоящее признание, но уже в сфере Интернет-программирования. За этот десяток лет компанией Sun Microsystems было создано несколько платформ для различных сфер деятельности.
 Java 2 Enterprise Edition - эта платформа необходима при создании серверных приложений;   Java 2 Standard Edition - используется для работы на простых компьютерных системах;  Java 2 Micro Edition - ориентирована на работу с портативными устройствами.
Все три платформы занимают свои ниши и решают круг определенных задач. Но если платформы Java 2 ЕЕ и Java 2 SE испытывают жесткую конкуренцию в своем секторе рынка со стороны других технологий, то Java 2 ME находится вне конкуренции и является фактически стандартом в разработке программ для портативных устройств. Можно с уверенностью сказать: то, для чего изначально создавался язык программирования Java, а именно, создание программ для бытовых устройств, в итоге и стало его стихией.



Так что такое платформа Java 2 ME, для чего она нужна и как устроена? На эти и другие вопросы мы попытаемся дать ответ в этой главе.

Язык программирования Java независим от архитектуры, в силу того, что используется интерпретатор, переводящий байт-код, сгенерированной компилятором в машинно-независимый код. Интерпретация кода осуществляется под управлением системы выполнения, носящей название виртуальная Java машина. Такой механизм образует среду исполнения приложений. Среда исполнения, в свою очередь, предъявляет определенные требования, к свойствам языка программирования Java, построенные на основе спецификации Java Language Specification, разработанной компанией Sun Microsystems. При написании программ на Java активно используются библиотека Java API, без которых написать приложение практически невозможно. Библиотека Java API содержит огромное количество предопределенных интерфейсов, классов, методов, констант помогающих программисту в минимальные сроки создавать рабочее приложение.

Подобный механизм создания и выполнения программ характерен для всех трех имеющихся платформ Java 2 ЕЕ, Java 2 SE и Java 2 ME. Платформы Java 2 ЕЕ и Java 2 SE можно признать почти одинаковыми, однако Java 2 ЕЕ несколько мощнее и содержит ряд библиотек позволяющих производить разработку программного обеспечения для серверов, а вот платформа Java 2 ME ориентирована именно на работу с портативными устройствами. В связи с этим Java 2 ME предъявляет уже свои требования к виртуальной Java машине, свойствам языка Java и библиотекам, поскольку системные ресурсы портативных устройств ограничены в силу своей спецификации аппаратного обеспечения. Небольшие размеры портативных устройств накладывают значительные ограничения на процессор, память, дисплей, устройство ввода, но платформа Java 2 ME разработана специально для того, чтобы создавать программы, ориентированные именно на такие портативные устройства.

Среда исполнения приложений Java, должна находиться внутри портативных устройств. За это отвечает их производитель, и это как раз и характеризует конкретное устройство, как устройство, поддерживающее технологию Java.

Количество портативных устройств поддерживающих Java достаточно большое, но мощность и, соответственно, возможности устройств различны. Поэтому платформа Java 2ME разработана в виде блочной модели надстраиваемых модулей, конфигураций и профилей.

Конфигурация определяет свойства языка Java и виртуальной Java машины, а также набор доступных библиотек Java API. Профиль в свою очередь предъявляет требования к аппаратной части устройства и может содержать ряд дополнительных библиотек Java, направленных на работу с конкретным портативным устройством.

Платформа Java 2 ME состоит из двух конфигураций: CDC (Connected Device Configuration - конфигурация подключаемых устройств) и CLDC (Connected Limited Device Configuration - конфигурация подключаемых устройств с ограничениями). Каждая из конфигураций определяет свое семейство портативных устройств. При программировании мобильных телефонов используется конфигурация CLDC. Каждая из конфигураций содержит свои профили, которые надстраиваются над своей конкретной конфигурацией. Когда программист создает программное обеспечение для портативных устройств, он обязан четко осознавать под какой профиль и конфигурацию он пишет программу, а производитель устройства должен осуществить поддержку того или иного профиля в связке со своей конфигурацией.

Как программист вы не можете повлиять на сущность профилей и конфигураций - это жестко заданныеспецификации, используемые в программировании портативных устройств. При создании программ вы будете ориентироваться на профиль, устанавливающий требования к аппаратной части устройства. На рис. 2.1 представлена общая схема модульного построения платформы Java 2 ME.


Рис. 2.1. Блочная схема построения платформы Java 2 ME

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

Цель этой книги научить вас создавать приложения для мобильных телефонов с применением конфигурации CLDC и профиля MIDP. Вся концепция книги построена на использовании связки MIDP/CLDC, но несколько слов стоит сказать о конфигурации CDC и доступных для этой конфигурации профилях.

Конфигурация CDC



Конфигурация CDC объединяет в себе ряд устройств имеющих постоянное сетевое соединение, таких как двунаправленные пейджеры, телевизионные приставки, автомобильные системы навигации, интеллектуальные коммуникаторы. Данные устройства характеризуются более мощными системными ресурсами, они имеют обычно 16 или 32-разрядные процессоры и как минимум 2 мегабайт памяти. В этой связи обе конфигурации CDC и CLDC, имеют свой набор свойств, определяющих поддержку библиотек Java API, виртуальную машину, свойства самого языка Java. Эти свойства и отличают разные конфигурации.

Как вы уже знаете, каждая из конфигураций построена на основе блочной схемы в виде надстраиваемых профилей. Профиль ставит определенные требования к аппаратной части устройства, и содержит свой набор API позволяющий создавать на основе имеющихся библиотек различные приложения. Профили созданы для определенной конфигурации, а приложения пишутся под конкретный профиль. Такая блочная модель позволяет любому приложению работать на портативных устройствах, поддерживающих данный профиль.

Конфигурация может содержать несколько профилей. Конфигурация CDC имеет два профиля - это Foundation Profile и Personal Profile и PDA. Смысл и устройство этих профилей мы рассматривать не будем, они не имеют никакого отношения к теме этой книги и были приведены лишь для понимания общей идеи конфигурации. При желании в документации по Java 2 ME вы сможете найти необходимую информацию и изучите ее самостоятельно.

Конфигурация CLDC



Конфигурация CLDC рассчитана на семейство мобильных устройств, таких как телефоны, органайзеры, КПК. Мобильные устройства, для которых предназначена конфигурация CLDC, характеризуются следующими параметрами:
 процессор 16 или 32-разрядный;  память от 160 до 512 килобайт, для всей платформы Jауа 2 ME;  беспроводное сетевое соединение;  питание от аккумуляторов.
Все перечисленные характеристики, несомненно, накладывает определенные ограничения на создаваемое приложение. Конфигурации CDC и CLDC независимы друг от друга и не могут использоваться вместе. Вся концепция конфигурации CLDC была разработана дочерней группой Java Community Process, компании Sun Microsystems, которая включает в себя множество известных компаний:
 America Online;  Bull;  Ericsson;  Fujitsu;  Matsushita;  Mitsubishi;  Motorola;  Nokia;  NTT DoCoMo;  Oracle;  Palm Computing;  RIM;  Samsung;  Sharp;  Siemens;  Sony;  Sun Microsystems;  Symbian.
Конфигурация CLDC содержит ряд классов, интерфейсов, методов платформы Java 2 SE, но в урезанном виде. Это и не мудрено, компьютерная платформа превосходит по мощности мобильные телефоны во много раз. С другой стороны, та простота, с которой можно за несколько недель создать среднее по сложности приложение, подкупает и даже возвращает нас во времена шестнадцатибитных приставок. На самом деле общая масса игр, написанных на Java 2 ME, по своему игровому процессу напоминает именно те старые добрые времена.

Конфигурация CLDC также определяется своим набором свойств состоящих из языка Java, виртуальной Java машины и библиотек API. В данный момент имеется две версии этой конфигурации - это CLDC 1.0 и CLDC 1.1. Конфигурация CLDC 1.1 имеет больше возможностей, например поддержку чисел с плавающей точкой, что соответственно предъявляет более серьезные требования к аппаратной части телефона. В момент написания книги таких телефонов не было, поэтому вся книга построена на конфигурации CLDC 1.0. К слову сказать, конфигурация CLDC 1.1 построена на первой версии и просто имеет ряд улучшений. Остановимся на каждом свойстве конфигурации CLDC 1.0 подробней. В последствии при упоминании конфигурации, будет иметься в виду CLDC 1.0.

Свойства языка Java



Все свойства языка Java в конфигурации CLDC должны, насколько это возможно, соответствовать спецификации языка Java, но в силу ограниченности системных ресурсов мобильных устройств, не поддерживаются следующие 'свойства доступные в платформах Java 2 ЕЕ и Java 2 SE:

1) операции с дробными числами (floating point);

2) финализация (finalization);

3) отсутствует восстановление ошибок после сбоя (error handling).

Виртуальная машина



Виртуальная машина, используемая в конфигурации CLDC, несколько отличается от обычной виртуальной машины задействованной в Java, но обязана оставаться совместимой со спецификацией этой виртуальной машины (Java Virtual Machine Specification). Виртуальная машина находится непосредственно в телефоне и за совместимостью с общепринятой спецификацией обязаны следить производители мобильных телефонов. Сама же виртуальная машина носит название Kilobyte Virtual Machine (KVM) из-за своей компактности и также имеет ряд недоступных свойств:

1) не поддерживаются операции с дробными числами (floating point);

2) нельзя создать класс загрузчик (class loader); 

3) отсутствует механизм отражения (reflection);

4) не реализован Java Nativ интерфейс (Java Native Interface);

5) не поддерживается финализация (finalization);

6) отсутствует восстановление ошибок после сбоя (error handling);

7) не поддерживается работа с групповыми потоками (Thread group).

Эти недоступные свойства языка Java и виртуальной Java машины, очевидным образом накладывают ощутимые ограничения на создаваемые программы, к сожалению, архитектура аппаратной части телефонов, еще пока не в силах выдержать столь высокую нагрузку и поэтому от перечисленных выше свойств пришлось отказаться.

Профиль



Как уже не раз отмечалось, профиль содержит предопределенные требования к аппаратной части устройства, а так же включает в себя минимальный набор API используемый в программировании мобильных устройств. Единственно доступный рабочий профиль в конфигурации CLDC имеет название MIDP (Mobile Information Device Profile - информационный профиль мобильных устройств). Спецификация профиля разработана экспертной группой MIDP Expert Group, в состав которой входят следующие компании:
 America Online;  DDI;  Ericsson;  Espial Group, Inc.;  Fujitsu;  Hitachi;  J-Phone;  Matsushita;  Mitsubishi;  Motorola, Inc.;  NEC;   Nokia;  NTT DoCoMo;  Palm;  Research In Motion;  Samsung;  Sharp;  Siemens;  Sony;  Sun Microsystems, Inc.;  Symbian;  Telcordia Technologies.
Профиль MIDP был создан специально для поддержки мобильных устройств и задает следующие технические характеристики для мобильных устройств:
 разрешение экрана минимум 96x54 пикселя с глубиной экрана минимум 1 бит;  устройством ввода может быть клавиатура или сенсорный экран;  32 килобайта динамической памяти;  128 килобайт под компоненты MIDP;  8 килобайт для хранения постоянных данных;  беспроводная сеть;  питание от аккумулятора.
Такое сочетание конфигурации и профиля CLDC/MIDP используется в программировании мобильных телефонов и будет основным сочетанием при рассмотрении примеров из книги.

На данный момент профиль MIDP имеет две версии: MIDP 1.0 и MIDP 2.0. До последнего времени первая версия MIDP была основным профилем при создании приложений для телефонов. Все телефоны, поддерживающие Java, имеют совместимость с профилем MIDP 1.0. Этот профиль был сформирован при начальном создании платформы Java 2 ME и имеет в своем составе определенный набор API,

С выходом профиля MIDP 2.0 добавилось ряд новых библиотек, значительно улучшающих создание приложений для мобильных телефонов. Но самое главное это то, что у него имеется полная совместимость с профилем MIDP 1.0. Профиль MIDP 2.0 содержит большое количество новых дополнительных библиотек, отсутствующих в составе MIDP 1.0, но при создании приложений под профиль MIDP 2.0, можно пользоваться библиотеками профиля MIDP 1.0. Если же вы пишите программу под профиль MIDP 1.0, то библиотеки профиля MIDP 2.0 вам будут недоступны. В книге будут рассмотрены оба профиля как единое целое. Подытожив все вышесказанное о профилях и конфигурациях необходимых для программирования мобильных телефонов, можно резюмировать: программный продукт создаваемый разработчиками ориентирован на конкретный профиль, который является, спецификацией устанавливающей определенные требования к аппаратной части телефона, а1 также содержит дополнительные библиотеки. Каждый конкретный профиль надстраивается над своей и только ему доступной конфигурацией. Конфигурация предъявляет требования к виртуальной Java машине и свойствам языка Java, используемым в этой конфигурации. Далее идет плотное взаимодействие с аппаратным обеспечением телефона, через имеющиеся сервисы, которые предоставляются операционной системой либо прошивкой телефона. Благодаря такой цепочке взаимодействий, любое программное обеспечение, написанное на Java под конкретный профиль, будет работать на телефоне с поддержкой Java. На рис. 2.2 хорошо прослеживается общая схема взаимодействия приложения с мобильным телефоном.


Рис 2.2. Схема взаимодействия приложений с аппаратным обеспечением телефона

Такая модульность в построении Java 2 ME дает неограниченную возможность в модернизации всей платформы и написанию действительно аппаратно-независимого кода программы. Люди, знакомые с моей книгой «DirectX 9. Уроки программирования на C++», обязательно найдут много общего в подходе реализации двух платформ DirectX и Java 2 ME. Оставшаяся часть этой главы целиком посвящена рассмотрению пакетов и классов доступных в MIDP 2.0/CLDC 1.0. Будут затронуты практически все имеющиеся компоненты данного профиля и конфигурации.

Профиль MIDP 2.0 и конфигурация CLDC 1.0



Язык Java самый «библиотечный язык», такого количества продуманных классов, наверное, нет ни в одном языке программирования. С другой стороны, простота в использовании Java, по всей видимости, поспособствовала определенной популярности этого языка. С точки зрения программиста, обилие готовых классов гораздо упрощает разработку программного продукта, и что самое главное, уменьшает сроки создания программ.

Профиль MIDP 2.0 и конфигурация CLDC 1.0, содержит большое количество интерфейсов и классов, использование которых в программировании приложений, пожалуй, сможет удовлетворить любого разработчика. Часть классов было взято из Java 2 SE с некоторыми усечениями, а часть была специально написана под Java 2 ME. Вся библиотека доступная для профиля MIDP 2.0 и конфигурации CLDC 1.0, состоит из одиннадцати пакетов. По традиции каждый отвечает за свою определенную область.
 java.lang;  java.util;  java.io;  javax.microedition.lcdui;  javax.microedition.lcdui.gamer  javax.microedition.io;  javax.microedition.media;  javax.microedition.media.control;  javax.microedition.pki;  javax.microedition.midlet;  javax.microedition.rms.
Все пакеты с префиксами javax.microedition.*, написаны специально для Java 2 ME профиля MIDP 2.0. Пакеты с префиксом Java.*, взяты из Java 2 SE версии 1.4, в урезанном виде, и имеет полную совместимость с оригиналом и определенны в конфигурации CLDC 1.0.

Пакет java.lang



Этот пакет содержит системные классы или основы языка Java и исключения. Имеется также один единственный интерфейс Runnable. На рис. 2.3 изображена иерархия классов пакета java.lang.

Рассмотрим имеющиеся компоненты пакета java.lang и дадим краткую характеристику каждому из них.



Рис 2.3. Иерархия классов пакета java.lang

Интерфейс:
 Runnable - создает поток в приложении.
Классы:
 Boolean - объектно-ориентированный класс, оболочка или как еще говорят «обвертка», для простого типа Boolean;  Byte - объектно-ориентированный класс для простого типа Byte;  Character - объектно-ориентированный класс для простого типа Char;  Class - виртуальная машина создает объекты этого класса, которые представляют интерфейсы и классы языка Java;  Integer - объектно-ориентированный класс для простого типа int;  Long - объектно-ориентированный класс, оболочка для простого типа;  Math - класс, содержащий математические методы;  Object - суперкласс для всех классов Java. Все классы наследуются от класса Object и являются его подклассами;  Runtime - класс времени исполнения;  Short - объектно-ориентированный класс, оболочка для простого типа Short;  string — создает строки символов;  StringBuffer - содержит строку символов любого размера;  System - содержит ряд системных методов;  Thread - создает поток в работе приложения;  Throwable - суперкласс для всех подклассов, предназначенных для работы с ошибками и исключениями.
Исключения:
 Exceptions - исключения для классов и подклассов;  ArithmeticException - арифметическое исключение;  ArrayIndexOutOfBoundsException - исключение обрабатывающее неправильный индекс в массиве данных;  ArrayStoreException - исключение обрабатывающее неправильно заданный тип объекта в массиве объектов;  ClassCastException - неправильно указан подкласс объекта;  ClassNotFoundException - класс не найден;  IllegalAccessException - нет доступа к классу;  IllegalArgumentException - указан неправильный аргумент;  IllegalMonitorStateException - мониторинг объектов;  IllegalStateException - неправильно вызванный метод;  IllegalThreadStateException - неправильные установки потока;  IndexOutOfBoundsException-исключает неверный указанный индекс;  InstantiationException - исключает ситуацию в создании или вызове членов абстрактного класса;  InterruptedException - исключает прерывание потока находящегося в состоянии ожидания:  NegativeArraySizeExcept'ion - исключает ситуацию в создании большего размера массива данных, чем было указано при инициализации;  NumberFormatException — неправильное преобразование строки в целочисленный тип данных;  Runt imeException - суперкласс исключений времени исполнения виртуальной машины Java;  SecurityException - менеджер безопасности;  StringlndexOutOfBoundsException - выход индекса за приделы строки.
Ошибки:
 Error - обобщенная модель ошибок;  OutOf MemoryError - ошибки связанные с выходом за пределы памяти;  VirtualMachineError — ошибка времени исполнения.

Пакет Java.util



В этом пакете содержатся классы стандартных утилит упрощающих работу программиста. Пакет сильно урезан по сравнению со стандартным пакетом Java 2 SE. На рис. 2.4 представлена иерархия классов пакета jova.util.



Рис 2.4. Иерархия классов пакета Java.util

Интерфейс:
 Enumeration - декларирует возможность доступа к элементам.
Классы:
 Calendar - выполняя функции обыкновенного календаря;  Date - реализует возможность работы с датой и временем;  Hashtable -имеет возможность в сохранении объектов с доступом к ним по определенно заданному ключу;  Random - генератор случайных чисел;  Stack - реализует функциональность стека;  Timer — реализует возможность работы со временем;  TimerTask - планировщик задач;  TimeZone - дает возможность в определении временного пояса;  Vector - класс для создания и содержания массивов любого размера.
Имеет возможность изменять размер заданного массива.

Исключения:
 EmptyStackException - указывает на пустой стек;  NoSuchElementException - исключение указывает на отсутствие элементов в определенном перечислении.

Пакет Java.io



Классы этого пакета отвечают за работу с входными и выходными потоками данных. На рис. 2.5 показана иерархия наследования классов пакета java.io.



Рис2.5. Иерархия пакета java.io

Интерфейсы:
 Datalnput - декларирует методы для чтения простых типов во входной поток данных;  DataOutput - декларирует методы для записи простых типов в выходной поток данных.
Классы:
 ByteArraylnputStream - необходим при чтении входного потока байт из массива данных, для дальнейшего размещения их в памяти;  ByteArrayOutputStream - необходим при записи потока байт из памяти в массив выходных данных;  DatalnputStream - этот класс должен наследоваться от интерфейса Datalnput, реализуя при этом все его методы;  DataOutputStream - класс Должен наследоваться от интерфейса Data-Output, реализуя при этом все его методы;  InputStream - абстрактный класс, предназначенный для работы с входным потоком байтов;  InputStreamReader - наследуется от класса Reader, реализуя методы для чтения символьных данных входного потока с перекодировкой;  OutputStream - абстрактный класс, предназначенный для работы с выходным потоком байт;  OutputStreamWriter -наследуется от класса Writer, реализуя методы для записи символьных данных в выходной поток с перекодировкой;  PrintStream - расширяет выходной поток способностью печати данных;'  Reader - абстрактный класс, предназначенный для чтения символьных данных входного потока;  Writer - абстрактный класс, предназначенный для записи символьных данных в выходной поток.
Исключения:
 EOFException - сигнализируете конце файла;  InterruptedlOException — сигнализирует о прерванном действии по вводу выводу;  IOException - указывает на исключение ввода вывода;  UnsupportedEncodingException - указывает на невозможность перекодировки;  UTFDataFormatException - сигнализирует о прочтении строки формата UTF-8.

Пакет javax.microedition.io



Этот пакет содержит множество интерфейсов и всего два класса обеспечивающих связь с сетью. На рис. 2.6 и рис. 2.7 приводится общая схема наследования соответственно интерфейсов и классов пакета javax.microedition.io.



Рис 2.6. Иерархия интерфейсов пакета javax.microedition.io

Интерфейсы:
 CommConnection - находит последовательный порт;  Connection - общий тип всей связи сети;  ContentConnection - находит связь с потоком;  Datagram - общий интерфейс дейтограммы;  DatagramConnection - определяет возможность связи дейтограммы;  HttpConnection - декларирует методы константы для http-соединения;  HttpsConnection - декларирует методы константы для безопасного http-соединения;  InputCdnnection - интерфейс для создания входной связи с сетью;  OutputConnection - интерфейс для создания выходной связи с сетью;  SecureConnection - определяет безопасную связь с сетью;  Securitylnfo - располагает методами для получения информации сетевой связи;  ServerSocketConnection - реализует связь с сервером;  SocketConnection - находит socket (сокет) для потока связи;  StreamConnection - связь с потоком;  StreamConnectionNotifier - определяет возможность всей связи;  UDPDatagramConnection - реализует связь с дейтограммой.


Рис 2.7. Иерархия классов пакета javax.microedition.io

Классы:
 Connector - класс для создания объектов связи;  PushRegistry - класс для поддержания списков связей.
Исключение:
 ConnectionNotFoundException - указывает на отсутствие связи.

Пакет javax.microedition.lcdui



Данный пакет имеет разнообразные классы для реализации пользовательского интерфейса в мобильных приложениях. Существует большое количество классов, благодаря которым можно создать действительно красивое интерактивное приложение. На рис. 2.8 изображена иерархия классов пакета javax.microedition.lcdui.



Рис 2.8. Иерархия классов пакета javax.microedition.lcdui

Интерфейсы: 
 Choice - содержит набор библиотек создающих возможность выбора заданных элементов;  CommandListener - реализует возможность получения событий;  ItemCommandListener - реализует возможность получения событий от объектов класса Item;  ItemStateListener - используется при получении событий о состоянии объектов класса Item встроенных в Form.
Классы:
 Alert - этот класс необходим при создании уведомлений об ошибках либо информационных сообщений;  AlertType — отображает тип ошибки;  Canvas - абстрактный класс, обеспечивает графическую прорисовку различных элементов на экране телефона;  ChoiceGroup - встраиваемая группа выбираемых элементов. Интегрируется в класс Form, наследуется от класса Item и реализует интерфейс Choice;  Command - инкапсулирует командные действия, при этом, не определяя фактические действия команды, а лишь содержит информацию;  Customltem- создает возможность в отображении новых графических , элементов встроенных в класс Form;  DateField - класс представляющий работу с датой и временем. Интегрируется в класс Form, наследуется от класса Item;  Display — этот класс-диспетчер, отвечающий за экран телефона;  Displayable - абстрактный класс, содержит иерархию классов пользовательского интерфейса;  Font - класс шрифтов;  Form - этот класс создает пустую форму в которую в последствии, можно встраивать ряд классов задающих пользовательский интерфейс всего приложения;  Gauge — показывает графическое течение процесса;  Graphics - предоставляет возможность в рисовании на экране телефона;  Image - класс, отвечающий за загрузку и отображение любых видов изображений формата PNG;  Imageltem - контейнер для загруженных в приложение изображений;  Item - суперкласс, содержащий ряд классов для их дальнейшей интеграции в класс Form;  List - создает список группы элементов;  Screen - суперкласс для всех высокоуровневых классов определяющих пользовательский интерфейс приложения;  Spacer - создает заданное пространство на экране;  Stringltem - дает возможность в создании массивов строк;  TextBox - создает редактируемый текстовый контейнер;  TextField- создает редактируемый текстовый контейнер, который встраивается в класс Form;  Ticker - создает в приложении бегущую строку текста.

Пакет javax.microedition.lcdui.game



Это новый игровой пакет добавлен в профиль MIDP 2.0. В состав пакета входит пять мощных и хорошо продуманных классовое помощью которых можно достаточно легко создавать игры для мобильных устройств. На рис. 2.9 показана иерархия классов пакета javox.microedition.lcdui.game.



Рис 2.9. Иерархия классов пакета

Классы:
 GameCanvas - абстрактный класс, содержащий основные элементы игрового интерфейса;  Layer - абстрактный класс, отвечающий за уровни представляемые в игре;  LayerManager - менеджер уровней;  Sprite - создает анимационные фреймы;  TiledLayer - отвечает за создание фоновых изображений.

Пакет javax.microedition.media



Пакет добавлен в профиль MIDP 2.0 и служит для создания звукового сопровождения в приложении. Пакет разработан специальной экспертной группой (MMAPI Expert Group), в состав которой входят такие известные компании:
 Nokia (Specification Lead);  Aplix Corporation;  Beatnik. Inc.;  France Telecom;  Insignia Solutions;  Mitsubishi Electric Corp.;  Motorola;  Netdecisions Holdings United;  NTT DoCoMo. Inc.;  Openwave Systems Inc.;  PacketVideo Corporation;  Philips;  Siemens AC ICM MP TI;  Smart Fusion;  Sun Microsystems. Inc.;  Symbian Ltd;  Texas Instruments Inc.;  Vodafone;  Yamaha Corporation;  Zucotto Wireless.
В профиле MI DP 1.0 отсутствует возможность полноценной работы со звуком, и каждый из производителей предоставлял свои библиотеки для этих целей. В профиле MIDP 2.0 такой необходимости уже нет и можно воспользоваться любым необходимым классом и интерфейсом из пакета javax.microedition.mediu. На рис. 2.10 приводится наследование интерфейсов этого пакета.



Рис 2.10. Иерархия интерфейсов из пакета javax.microedition. media.

Интерфейсы:
 Control - осуществляет контроль над процессами;  Controllable - осуществляет контроль над объектами;  Player - реализует контроль над воспроизведением;  PlayerListener - необходим для получения асинхронных событий : принятых от проигрывателя.
Классы:
 Manager - менеджер системных ресурсов.
Исключение:
 MediaException - исключает ошибки в работе методов этого пакета.

Пакет javax.microedition.media.control



С помощью пакета javax.microedition.media.control определяется контроль над воспроизведением заданных звуковых данных. Это небольшой пакет, имеющий в своем составе всего два интерфейса, а на рис. 2.11 дается схема наследования интерфейсов. 



Рис.2.11. Иерархия интерфейсов пакета javax.microedition.media.control

Интерфейсы:
 ToneControl - воспроизведение однотональных звуков;  VolumeControl - регулирует громкость воспроизведения.

Пакет javax.microedition.midlet



Сам по себе пакет небольшой, но он играет ключевую роль при создании приложений на Java 2 ME. С помощью этого пакета происходит связь между приложением и мобильным информационным профилем устройства (MIDP). Рисунок 2.12 отражает полную иерархию пакета javax.microedition.midlet.



Рис. 2.12. Иерархия пакета javax.microedition.midlet

Класс:
 MIDlet - основной класс программы должен наследовать класс MIDlet, для управления работой приложения.
Исключение:
 MIDletStateChangeException - исключает неправильную работу с классом MIDlet.

Пакет javax.microedition.pki



Пакет javax.microedition.pki сертифицирует информацию для безопасной связи. Рисунок 2.13 содержит иерархию этого пакета.



Рис.2.13. Иерархия пакета javax.microedition.pki

Интерфейс:
 Certificate - общий сертификат.
Исключение:
 CertificateExceptio - обобщенный вид ошибок, возникший при использовании данного сертификата.

Пакет javax.microedition.rms



Этот пакет предназначен для создания механизма хранения и извлечения данных из памяти устройства. Хранение и запись данных происходит на основе менеджера системной записи (Record MaAagement System), что дает возможность удалять, добавлять, просматривать, изменять или составлять список всех имеющихся записей. Имеется один класс и несколько интерфейсов реализующих механизм сохранения и извлечения данных. На рис. 2.14 представлена иерархия пакета javax.microedition.rms.



Рис 2.14. Иерархия пакета javax.microedition.rms

Интерфейсы:
 RecordComparator - осуществляет сравнение двух записей;  RecordEnumeration - реализует двунаправленный список записи;  RecordFilter - определяет различные совпадения в записях;  RecordListener - прослеживает события записи данных.
Класс:
 RecordStore - производит запись данных.
Исключения:
 InvalidRecprdlDException - исключает запись данных в неправильно указанный адрес;  RecordStoreException - индикатор ошибки записи данных;  RecordStoreFullException - указывает на переполнение системных ресурсов для записи данных;  RecordStoreNotFoundException - показывает, что указанное место для записи данных не было обнаружено;  RecordStoreNotOpenException - указывает на невозможность записи.
В этой главе мы рассмотрели состав одиннадцати пакетов, давая краткую характеристику имеющимся интерфейсам, классам и исключениям. В конце книги в приложении 2, вы найдете справочник по Java 2 ME, где рассматриваются более подробно все составляющие CDLC/MIDP.

В следующей главе будет изучены интегрированные средства разработки приложений, бесплатно предоставляемые компанией Sun Microsystems.