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

         

Платформа Java Micro Edition


В этой главе... 2.1. Конфигурация CDC 2.2. Конфигурация CLDC 2.2.1. Свойства языка Java 2.2.2. Виртуальная машина 2.3. Профиль 2.4. Профиль MIDP 2.0 и конфигурация CLDC 1.0 2.4.1. Пакет java.lang 2.4.2. Пакет java.util 2.4.3. Пакет java.io 2.4.4. Пакет javax.microedition.io 2.4.5. Пакет javax.microedition.lcdui 2.4.6. Пакет javax.microedition.lcdui.game 2.4.7. Пакет javax.microedition.media 2.4.8. Пакет javax.microedition.media.control

2.4.9. Пакет javax.microedition.midlet 2.4.10. Пакет javax.microedition.pki 2.4.11. Пакет javax.microedition.rms

Конфигурация 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.



Пакет Javaio




Классы этого пакета отвечают за работу с входными и выходными потоками данных. На рис. 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.



Пакет javalang




Этот пакет содержит системные классы или основы языка 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 — ошибка времени исполнения.



Пакет Javautil




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



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



Интерфейс:

 Enumeration - декларирует возможность доступа к элементам.


Классы:

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


Имеет возможность изменять размер заданного массива.

Исключения:

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



Пакет javaxmicroeditionio




Этот пакет содержит множество интерфейсов и всего два класса обеспечивающих связь с сетью. На рис. 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 - указывает на отсутствие связи.



Пакет javaxmicroeditionlcdui




Данный пакет имеет разнообразные классы для реализации пользовательского интерфейса в мобильных приложениях. Существует большое количество классов, благодаря которым можно создать действительно красивое интерактивное приложение. На рис. 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 - создает в приложении бегущую строку текста.

Пакет javaxmicroeditionlcduigame




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



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



Классы:

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



Пакет javaxmicroeditionmedia




Пакет добавлен в профиль 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 - исключает ошибки в работе методов этого пакета.



Пакет javaxmicroeditionmediacontrol




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



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



Интерфейсы:

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



Пакет javaxmicroeditionmidlet




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



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



Класс:

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


Исключение:

 MIDletStateChangeException - исключает неправильную работу с классом MIDlet.



Пакет javaxmicroeditionpki




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



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



Интерфейс:

 Certificate - общий сертификат.


Исключение:

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



Пакет javaxmicroeditionrms




Этот пакет предназначен для создания механизма хранения и извлечения данных из памяти устройства. Хранение и запись данных происходит на основе менеджера системной записи (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.



Профиль




Как уже не раз отмечалось, профиль содержит предопределенные требования к аппаратной части устройства, а так же включает в себя минимальный набор 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 и конфигурация CLDC




Язык 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




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

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

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

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



с основами программирования на 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 и доступных для этой конфигурации профилях.


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




Виртуальная машина, используемая в конфигурации 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 машины, очевидным образом накладывают ощутимые ограничения на создаваемые программы, к сожалению, архитектура аппаратной части телефонов, еще пока не в силах выдержать столь высокую нагрузку и поэтому от перечисленных выше свойств пришлось отказаться.



Файл JAD




Как уже упоминалось, в рабочем каталоге проекта «Demo» будет находиться еще один файл Demo.jad. JAD-файл в мобильных приложениях еще называют дескриптором приложения Qava Application Descriptor). Этот файл используется телефоном во время работы программы для получения информации об имеющихся классах, изображениях, пиктограммах и звуковых файлах всей программы. На основе полученной информации происходит управление внутренними ресурсами приложения. Если вы переместитесь в рабочий каталог проекта «Demo» и найдете сгенерированный файл Demo.jad, то увидите иконку в виде телефона с левой стороны от названия файла. Сделав двойной щелчок левой кнопкой мыши на файле Demo.jad, вы запустите эмулятор телефона вне зависимости от того, открыта ли в данный момент одна из сред программирования или нет. Это еще раз указывает на то, что JAD-файл используется для управления работой программы. Но есть и еще одна интересная особенность JAD-файла. Откройте файл Demo.jad с помощью любого текстового редактора и вы увидите следующие  строки:

MIDlet-1: Demo, Demo.png, HelloMIDlet MIDlet-Jar-Size: 30 MIDlet-Jar-URL: Demo.jar MIDlet-Name: Demo MIDlet-Vendor: Unknown MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-1.0
JAD-файл тоже содержит описание атрибутов приложения и они во многом дублируются в файле манифеста MANIFEST.MF. В программах Java 2 ME, JAD-файл - это дескриптор приложения и используется для управления работой программы. Сервис телефона перед запуском программы обращается именно к JAD-файлу, определяя тем самым возможность работы всей программы на этом телефоне. Если один из параметров будет не допустимым для этой модели телефона, то приложение не будет запущено. Например, телефон не поддерживает ту или иную версию конфигурации и профиля, или размер JAR-файл, больше допустимой памяти в телефоне выделенной для Java программ (правда в этом случае вы вообще не сможете загрузить приложение в телефон).



Файл JAR




В языке Java существует возможность архивации файлов приложения в один файл с расширением *.jar. Файл JAR - это архив, содержащий сопутствующие классы и графические изображения всего приложения. JAR-архив основан на обыкновенном zip-формате, использующемся повсеместно. При написании программ на Java под различные компьютерные операционные системы, программист волен сам выбирать, будет ли он распространять свое приложение в заархивированном виде или в оригинальном. Ситуация с распространением-переносом программ под мобильные телефоны радикально противоположная. Телефоны ограничены в своих ресурсах и в среднем память, отведенная под Java программу, колеблется от 30 до 80 килобайт. Эти цифры обязательно надо учитывать при создании мобильных приложений. Размер в 40-50 килобайт считается оптимальным. В связи с этим все мобильные программы обязаны распространяться в заархивированном виде, то есть в JAR-файле. Написав программу для телефона необходимо ее упаковать в jar-архив. Вернемся к примеру HelloMIDlet проекта Demo и рассмотрим на практике создание JAR-файла.

При использовании Sun ONE Studio 4 Mobile Edition создание JAR-файла происходит автоматически после компиляции и компоновки всего проекта и созданный архив помещается в рабочий каталог.

В среде J2ME Wireless Toolkit 2.1 после компиляции исходного кода необходимо произвести явную упаковку программы. Выберете в меню среды J2ME Wireless Toolkit опцию Project => Package => Create Package. На несколько секунд в рабочем окне появится небольшое диалоговое окно, показывающее процесс упаковки программы в JAR-файл. После чего в каталоге проекта Demo в папке \Ып появится файл Demo.jar. А теперь перейдите в рабочий каталог проекта Demo и найдите сформированный архив Demo.jar. Затем воспользуйтесь любым архиватором, поддерживающим zip-формат, например WinRar или WinZip и откройте файл Demo.jar. Вы увидите файл HelloMIDlet.class и папку META-INF, открыв которую обнаружите файл манифеста MANIFEST.MF.

Что происходит при создании архива? В момент упаковки приложения в JAR-файл, происходит копирование всех имеющихся откомпилированных и проверенных классов и графических изображений (если таковые имеются) и размещение их в JAR-файл, то есть происходит архивация всей программы. В рассматриваемом примере HelloMIDlet существует всего один класс, но если программа имеет большое количество классов, то все они помещаются в JAR-файл. Также происходит копирование файла манифеста MANIFEST.MF в папку META-INF. После упаковки в рабочем каталоге приложения будут находиться два файла с расширением JAR и JAD и именно в таком виде можно перенести программу в мобильный телефон посредством Интернета или компьютера связанного с мобильным телефоном любым из способов. Все приложения и игры, написанные на  Java 2 ME, распространяются именно таким образом. Файл с расширением JAR содержит упакованную программу, а файл с расширением JAD описывает содержимое JAR-файла. При загрузке программ в телефон необходимо указывать путь к JAD файлу, то есть дескриптору приложения и на основании атрибутов JAD-файла происходит работа Java программы. Единственное исключение - это телефоны марки Siemens. При загрузке программ в телефон этой марки нужно указывать путь к JAR-файлу, о чем подробно будет рассказано в следующей главе, в которой будет рассматриваться программное обеспечение, поставляемое производителями мобильных телефонов для эмуляции работы мобильных телефонов различных моделей.



Файл манифеста




Файл манифеста MANIFEST.MF описывает возможные атрибуты создаваемого приложения. Откройте файл манифеста программы HelloMIDlet с помощью любого текстового редактора, например блокнота и вы увидите следующие строки:

MIDlet-1: Demo, Demo.png, HelloMIDlet MIDlet-Name: Demo MIDlet-Vendor: Unknown MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-1.0
Эти строки описывают атрибуты приложения. При создании проекта с J2ME Wireless Toolkit в разделе 3.3.2 этой главы упоминалось о диалоговом окне Settings for project «Demo» изображенном на рис. 3.26. Это окно разделено на семь вкладок, в каждой из которых указываются различные атрибуты создаваемого приложения. На основе заданных атрибутов в диалоговом окне Settings for project «Demo», и происходит генерация файла манифеста, а так же JAD-файла.



Средства разработки мобильных приложений


В этой главе... 3.1. Установка Java 2 SDK SE 3.2. Среда программирования SUN ONE Studio 4 Mobile Edition 3.2.1. Настройка SUN ONE Studio 4 Mobile Edition. 3.2.2. Создание проекта в SUN ONE Studio 4 Mobile Edition 3.2.3. Создание приложений в SUN ONE Studio 4 Mobile Edition 3.2.4. Компиляция и запуск программ в SUN ONE Studio 4 Mobile Edition 3.3. Среда программирования J2ME Wireless Toolkit 2.1 3.3.1. Установка J2ME Wireless Toolkit 2.1 3.3.2. Создание проекта в J2ME Wireless Toolkit 2.1 3.3.3. Компиляция и запуск программы в J2ME Wireless Toolkit 2.1 3.4. Упаковка программ 3.4.1. Файл манифеста 3.4.2. Файл JAD 3.4.3. Файл JAR

Компиляция и запуск программ в SUN ONE Studio Mobile Edition




В результате всех вышеперечисленных действий вы получили код простого примера HelloMIDlet выводящего на экран телефона информационную надпись Test string. Но сначала необходимо откомпилировать и собрать программу. Для компиляции исходного кода выберете в меню команду Build => Compile или используйте «горячую» клавишу F9. Откомпилировав рассматриваемый пример, произведите компоновку всего проекта путем выбора команды из меню Build => Build или нажмите клавишу F11. После этих действий у вас появится возможность запуска созданной программы на эмуляторе телефона предоставляемого средой программирования SUN ONE Studio 4 Mobile Edition. Для этого в меню выберете команду Debug => Start или воспользуйтесь сочетанием клавиш Alt+F5. После запуска откомпилированной и скомпонованной программы на экране появится эмулятор телефона изображенный на рис. 3.19.



Рис. 3.19. Эмулятор телефона, демонстрирующий работу примера HelloMIDIet



Эмуляторы телефона, существующие в составе SUN ONE Studio 4 Mobile Edition, представлены встроенной средой программирования J2ME Wireless Toolkit 1.0. Имеется несколько эмуляторов мобильных устройств:

 DefaultColorPhone - простой телефон с цветным дисплеем;  DefaultGrayPhone — телефон с монохромным дисплеем;  MinimumPhone - телефон с минимальными техническими характеристиками;  Motorola_i85s - эмулятор телефона i85s компании Motorola;  PalmOS_Device - представляет устройство фирмы Palm;  RIMJavaHandheld - представляет устройство фирмы Blackberry.


Чтобы подключить любой эмулятор из имеющегося списка для тестирования разработанной программы, необходимо выбрать вкладку Выполнение в окне Explorer, нажав на футуристический ключ с левой стороны каталога Device Emulator Registry, раскрыв тем самым ветку дерева этого каталога, показанную на рис. 3.20.



Рис. 3.20. Вкладка Выполнение Окна Explorer


Для того чтобы посмотреть доступные эмуляторы, откройте подкаталог Installed Emulators каталога Device Emulator Registry, нажав на ключик с левой стороны подкаталога. Раскрыв подкаталог Installed Emulators, вы увидите вложенную папку J2ME Wireless Toolkit 1.0, содержащую выше перечисленные в этом разделе эмуляторы. Для того чтобы выбрать эмулятор из папки J2ME Wireless Toolkit 1.0, щелкните правой кнопкой мыши на необходимом эмуляторе, например Motorola_j85s и в появившемся меню выберете команду Set As Default, назначив этот эмулятор текущим для данного проекта. Чтобы протестировать созданную программу на новом эмуляторе, запустите программу снова, выбрав в меню команду Debug => Start или используйте сочетание клавиш Alt+F5. На рис. 3.21 изображен эмулятор телефона i85s фирмы Motorola.



Рис. 3.21. Эмулятор телефона i85s


Впоследствии при установке эмуляторов и средств программирования сторонних производителей, можно подключать новые эмуляторы в инструментарий SUN ONE Studio 4 Mobile Edition. Для этого необходимо выбрать вкладку Выполнение в окне Explorer и нажать на ключ с левой стороны каталога Device Emulator Registry раскрыв ветку дерева этого каталога и правой кнопкой мыши щелкнуть на подкаталоге Installed Emulators. В появившемся меню выберете команду Add emulators. Затем появится диалоговое окно Select emulator installation directory, где нужно указать директорию, в которой установлен необходимый эмулятор, и нажать на кнопку Add. Некоторые производители телефонов позаботились об интеграции своих программных продуктов в среду SUN ONE Studio 4 Mobile Edition и на начальном этапе установке этих средств, можно указать, желаете ли вы встроить устанавливаемую программу в SUN ONE Studio 4 Mobile Edition или нет. В следующей главе будут рассматриваться множество программ от различных производителей, где мы обязательно рассмотрим возможность добавления эмуляторов в среду программирования SUN ONE Studio 4 Mobile Edition.



Компиляция и запуск программы в JE Wireless Toolkit




В качестве демонстрационного примера мы используем проект Demo, созданный автоматически SUN ONE Studio 4 Mobile Edition в разделе 3.2.3. Найдите исходный код HelloMIDlet проекта Demo в директории, которую вы задали для размещения программ в SUN ONE Studio 4 Mobile Edition или возьмите код HelloMIDlet с компакт диска в папке \Code\ HelloMIDlet, поместите его в директорию C:\WTK21\apps\Demo\src. Затем нажмите кнопку Build на панели инструментов для компиляции и компоновки всего проекта. В рабочее окно J2ME Wireless Toolkit 2.1, добавятся две строчки:

Building "Demo" Build complete
Здесь я, конечно, исключаю возможность появления ошибок при компиляции, но в реальном программировании приложений без этого не обойтись, программист где-нибудь да забудет поставить точку с запятой. После компиляции и компоновки проекта, нажмите кнопку Run, и на экране появится эмулятор по умолчанию DefaultColorPhone, предоставляемый J2ME Wireless Toolkit 2.1 и изображенный на рис. 3.28.



Рис. 3.28. Эмулятор телефона DefaultColorPhone


На экран эмулятора будет выведено имя проекта, нажав на клавишу эмулятора Select или Launch, вы попадете в рабочий цикл программы, и на экране эмулятора появится надпись Test string. Нажав на клавишу Exit можно выйти из приложения. По окончанию работы эмулятора, в консоли рабочего окна J2ME Wireless Toolkit 2.1, появятся примерно следующие надписи:

Running with storage root DefaultColorPhone Execution completed. 493084 bytecodes executed 57 thread switches 487 classes in the system (including system classes) 2844 dynamic objects allocated (92068 byte,s) 2 garbage collections (61976 bytes collected)
Это строки информационного характера, которые знакомят вас 6 произошедшими процессами в момент работы приложения. Для того чтобы протестировать созданную программу на других телефонных эмуляторах, необходимо в поле Device среды разработки приложений J2ME Wireless Toolkit 2.1, выбрать из списка нужный эмулятор. В составе J2ME Wireless Toolkit 2.1 имеются следующие эмуляторы телефонов:

 DefaultColorPhone - простой телефон с цветным дисплеем;  DefaultGrayPhone - телефон с монохромным дисплеем;  MinimumPhone - телефон с минимальными техническими характеристиками;  MediaControlSkin — простейший эмулятор телефона контролирующий воспроизведение звуков;  QwertyDevice - портативное устройство с клавиатурой.


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



Настройка SUN ONE Studio Mobile Edition




После установки среды программирования SUN ONE Studio 4 Mobile Edition на рабочем столе появится иконка быстрого старта, При первом вызове инстру ментария SUN ONE Studio 4 Mobile Edition, необходимо настроить некоторые параметры. В первом появившемся окне, изображенном на рис. 3.4 надо выбрал директорию, где будет располагаться ваш рабочий каталог, содержащий исходные коды создаваемых программ.



Рис. 3.4. Выбор рабочей директории


Выберите любой устраивающий вас каталог, или создайте новый и нажмите кнопку Next. Следующее окно, показанное на рис. 3.5, предложит сохранить настройки от предыдущих версий.



Рис. 3.5. Окно Setting Import Wizard


Если у вас были установлены ранние версии SUN ONE Studio, воспользуйтесь этим мастером, если нет, нажмите кнопку Finish. В cледующем появившемся окне, показанном на рис. 3.6, будет предложено сконфигурировать установленную среду программирования при помощи мастера конфигурации.



Рис. 3. 6. Окно Setup Wizard


Настройка с помощью мастера Setup Wizard происходит в три этапа. На первом этапе, в окне, показанном на рис. 3.6, можно установить режим отображения инструментария, выбрать web-браузер, а также по необходимости задать используемый прокси сервер (Proxy Server). Задайте необходимые настройки и нажмите кнопку Next. Следующее диалоговое окно изображенное на рис. 3.7, показывает перечень инсталлируемых модулей.



Рис. 3.7. Инсталлируемые модули



Настройки по умолчанию в этом окне целесообразно оставить без изменений. Далее, нажав кнопку Next, вы попадете в последнее диалоговое окно Update Center, изображенное на рис. 3.8, с помощью которого можно обновить установленные компоненты через Интернет.



Рис. 3.8. Окно Update Center



Если вы имеете подключение в Интернет, то можно обновить некоторые из компонентов, процедура абсолютно бесплатна. Для отказа от обновления нажмите кнопку Finish. После чего перед вами появиться рабочая поверхность SUN ONE Studio 4 Mobile Edition, а на ее фоне окно Registration Wizard, показанное на рис. 3.9. С помощью этого окна необходимо зарегистрировать установленный продукт на сайте производителя.



Рис. 3.9. Окно Registration Wizard



Рекомендую вам зарегистрировать этот инструментарий, тем более что это бесплатно и в будущем может принести вам немалую пользу, например обновление установленных компонентов. После регистрации вы попадете непосредственно в главное окно SUN ONE Studio 4 Mobile Edition, где перед вами появится диалоговое окно Welcome SUN ONE Studio 4 update 1, Mobile Edition, показанное на рис. ЗЛО, благодаря которому можно создать проект или открыть необходимый файл.



Рис. 3.10. Окно Welcome SUN ONE Studio 4 update 1, Mobile Edition


С помощью окна Welcome можно осуществить так называемый быстрый старт, выбрав необходимое действие. По размеру окно довольнo таки большое и разделено на две части. В его нижней области имеется возможность отключения появления этого окна при открытии среды программирования SUN ONE Studio 4 Mobile Edition. Произведя таким образом настройку инструментария при первом старте, вы получите все рабочее окно SUN ONE Studio 4 Mobile Edition, изображенное на рис. 3.11.



Рис. 3.11. Рабочее окно SUN ONE Studio 4 Mobile Edition


Главное окно инструментария выполнено в лучших традициях подобных средств программирования, предоставляя большое количество разнообразных панелей инструментов, меню, кнопок, текстовых полей, а также окно Explorer (обозреватель), которое находится с левой стороны рабочей поверхности SUN ONE Studio 4 Mobile Edition. Окно Explorer состоит из трех вкладок: Файловые системы, Выполнение и Javadoc. Они находятся в нижней части окна Explorer.

Вкладка Файловые системы дает возможность подключить к проекту рабочую директорию, где, впоследствии, будут находиться исходные коды, то есть произвести монтаж файловой системы. Там же происходит подключение архивов Archive (JAR, Zip), о чем подробно будет рассказано в разделе 3.2.2.

Во вкладке Выполнение можно подключить телефонные эмуляторы и следить за процессами отладки и выполнения программы.

Вкладка Javadoc содержит сгенерированную документацию к проекту в виде HTML страниц.

Линейка меню, в верхней части среды программирования SUN ONE Studio 4 Mobile Edition, содержит множество команд. Щелкнув мышью на одном из названий, откроется выпадающее меню, содержащее список новых команд. Некоторые команды имеют выпадающие подменю. Рассмотрим ряд основных команд среды программирования SUN ONE Studio 4 Mobile Edition. Напротив каждой из команд в скобках находятся названия «горячих клавиш» для быстрой работы с системой.

Меню File

 New (Ctrl+N) - создает новый файл.  Mount Filesystem - осуществляет монтирование файловой системы.  Unmount Filesystem - удаляет файловую систему.  Open File (Ctrl+O) - открывает файл.  Save (Ctrl+S) - сохраняет открытый файл.  Save All - сохраняет все открытые файлы.  Print (Ctrl+P) - печать.  Page Setup - предварительный просмотр.  Exit - выход из SUN ONE Studio 4 Mobile Edition.


Меню Edit

 Undo (Ctrl+Z) - возврат произведенной операции на шаг назад.  Redo (Ctrl+Y) - перевод к произведенной операции на шаг вперед.  Cut (Ctrl+X) - вырезает часть кода, текста и так далее.  Copy (Ctrl+C) - копирует информацию в буфер обмена.  Paste (Ctrl+V) - вставка.  Delete (Delete) - удаление информации.  Find (Ctrl+F) - поиск.  Replace (Ctrl+H) - повтор.  Search Filesystem - поиск файловой системы. х


Меню View

 Explore From Here (Ctrl+O) - открывает окно обозревателя в главном окне.  Properties (Ctrl+1) - свойства файла.  Explorer (Ctrl+2) - обозреватель.  Source Editor (Ctrl+3) - текстовый редактор.  Output Window (Ctrl+4) - окно вывода, показывает результат работы программы.  Debugger Window (Ctrl+5) - окно отладчика.  Web Browser (Ctrl+7) - Интернет-браузер.  Javadoc Index Search (Shift+Fl) - поиск по индексу в документации.  Workspaces - рабочее окно.


Меню Project

 Project Manager (Ctrl+Shift+F9) - открывает окно менеджера проекта.  Compile Project (Ctrl+Shift+Fl 1) - компилирует весь проект.  Build Project (Ctrl+Shift+Fl 1) - компонует весь проект.  Set Project Main Class (Ctrl+Shift+M) - устанавливает выбранный файл с кодом - главным классом всей программы.  Debug Project (Ctrl+Shift+F5) - отладчик проекта.  Import Project - импортирует выбранный проект.


Меню Build

 Compile (F9) - компилирует выбранный файл.  Compile All (Shift+F9) - компилирует все файлы проекта.  Build (F11) - компонует выбранный файл.  Build All (Shift+FH) - компонует все файлы проекта.  Stop Compile (Alt+Shift+C) - остановка компиляции.  Next Error (F12) - следующая ошибка.  Previous Error (Shift+F12) - предыдущая ошибка.


Меню Debug

 Start (Alt+F5) - запуск откомпилированной программы.  Finish (Shift+F5) - остановка работы программы.  Add Breakpoint (Ctrl+Shift+F8) - установка точки прерывания.  Debugger Window (Ctrl+FS) - окно отладчика.


Меню Help

 Contents - содержание справки.  Наборы Справок - открывает подменю с набором имеющихся справок.



Создание приложений в SUN ONE Studio Mobile Edition




Завершив создание проекта, можно переходить к написанию кода приложения. Для этого перейдите на закладку созданного проекта Demo, в окне Explorer и выберете команду меню File => New File, либ9 воспользуйтесь горячими клавишами Ctrl+N. На экране появится окно New Wizard, представленное на рис. 3.16, где происходит выбор шаблона создаваемого приложения.



Рис. 3.16. Окно New Wizard



В качестве создаваемой демонстрационной программы произведем выбор шаблона HelloMIDlet, который формирует код простой программы, имеющей название мидлет и позиционирующейся в Java 2 ME как приложение, написанное специально для мобильного устройства. В главе 5 будет дано подробное объяснение сути мидлета. Нажав на кнопку Next, вы попадете в следующее окно New Wizard - HelloMIDlet, где необходимо указать будущую директорию нахождения мидлета и задать имя пакету, либо воспользоваться стандартным пакетом, предоставляемым по умолчанию. На рис. 3.17 показано окно New Wizard -HelloMIDlet с выбранной директорией и пакетом по умолчанию.



Рис. 3.17. Окно New Wizard - HelloMIDIet


Указав пакет и выбрав директорию, нажмите на кнопку Finish. После этого будет автоматически сгенерирован простейший код примера HelloMIDlet проекта Demo, который появится в текстовом редакторе Source Editor, с правой стороны в свободном до этого времени пространстве главного окна среды SUN ONE Studio 4 Mobile Edition, представленного на рис. 3.18.



Рис. 3.18. Окно проекта Demo



Работа с кодом в текстовом редакторе Source Editor, осуществляется обычным образом, характерным практически для всех сред программирования.



Создание проекта в JE Wireless Toolkit




Рабочее окно среды J2ME Wireless Toolkit, выглядит на много проще чем SUN ONE Studio 4 Mobile Edition. Для создания нового проекта нажмите на панели инструментов кнопку New Project, либо выберете в меню команду File => New Project. В появившемся окне New Project, показанном на рис. 3.25, в поле Project Name дайте имя всему проекту, например Demo и в поле MIDlet Class Name, задайте название основному классу мидлета приложения.



Рис. 3.25. Окно New Project


Чтобы было понятно, о чем идет речь, забегая вперед, поясню: мидлет в Java 2 ME - это вся программа в целом, а с основного класса мидлета начинается работа всего приложения. Поэтому названия данное в поле MIDlet Class Name должно соответствовать названию основного класса мидлета, нельзя не задавать название основному классу мидлет либо использовать несуществующее название, иначе при компиляции возникнет масса ошибок. В главе 5, вы найдете более подробное объяснение модели работы и построения программ в Java 2 ME. При знакомстве с инструментарием SUN ONE Studio 4 Mobile Edition, был создан проект Demo, основной класс мидлета имел название HelloMIDlet; воспользуемся этим исходным кодом и дадим название классу мидлета HelloMIDlet в поле MIDlet Class Name, и нажмем после этого кнопку Create Project. Вслед за этим появится диалоговое окно Settings for project «Demo», показанное на рис. 3.26, где нужно произвести ряд установок для настройки нового проекта.

Диалоговое окно Settings for project «Demo» разделено на семь вкладок, в каждой из которых можно задавать различные установки для создаваемого проекта. Первая вкладка API Selection, изображенная на рис. 3.26, позволяет задавать конфигурацию и профиль создаваемого проекта. И здесь необходимо быть аккуратным: если вы планируете разрабатывать приложение только под профиль MIDP 1.0, то в поле Target Platform (выбор платформы), нужно указать соответствующий профиль.



Рис. 3.26. Диалоговое окно Settings for project «Demo»


Вторая вкладка Required (Атрибуты), изображенная на рис. 3.27, содержит мета информацию создаваемой программы в виде семи различных значений, которые можно устанавливать должным образом.

 MIDlet -Jar - Size - размер всего создаваемого приложения;  MIDlet -Jar - URL - местонахождение проекта;  MIDlet - Name - имя проекта;  MIDlet - Vendor - создатель программы;  MIDlet - Version - версия программы;  MicroEdition - Configuration - конфигурация;  MicroEdition - Profile - выбранный профиль.


Вся заданная информация для мидлета будет находиться в JAD файле. По ходу работы над проектом имеется возможность изменения заданных атрибутов с помощью кнопки Settings на панели инструментов рабочего окна J2ME Wireless Toolkit 2.1. Подробно о файлах JAD и JAR будет рассказано в конце этой главы' в разделе 3.4. Все оставшиеся вкладки имеют различные дополнительные свойства и заданные на этих вкладках значения почти всегда можно оставлять по умолчанию. Нажав на, кнопку ОК после всех установок, в окне Settings for project «Demo» будет создан новый проект Demo.



Рис. 3.27. Вклакда Required


Среда программирования J2ME Wireless Toolkit 2.1, к сожалению, не имеет своего текстового редактора. Для создания исходного кода приложения вам необходимо написать код программы в любом удобном текстовом редакторе и поместить этот код в директории J2ME Wireless Toolkit 2.1. Как это делается? В тот момент, когда вы нажмете на кнопку ОК, в окне Settings for project -«Demo» будет создан новый проект, в нашем случае это Demo. А в консоли главного окна среды программирования J2ME Wireless Toolkit 2.1 появятся примерно следующие строки:

Creating project "Demo" Place Java source files in "C:\WTK21\apps\Demo\src" Place application resource files in "C:\WTK21\apps\Demo\res" Place application library files in "C:\WTK21\apps\Demo\lib"
Из этих строк следует, что файлы исходного кода (это, как правило, файлы с расширением *.java), необходимо поместить в директорию C:\WTK21\apps\Demo\src. Файлы ресурсов, иконки, изображения и так далее помещаются в директорию C:\WTK21\apps\Demo\res; и файлы библиотек, если таковые используются в C:\WTK21\apps\Demo\lib. То есть, создав исходный код приложения в текстовом редакторе, просто сохраните код в директорию: C:\WTK21\apps\Demo\src. Кроме трех перечисленных папок, созданных в рабочем каталоге проекта Demo, будут автоматически сгенерированно ещё четыре папки:

 bin - содержит файлы: jar, jad и файл манифеста. Более подробно об этих файлах рассказывается в разделе 3.4, где будет рассматриваться упаковка программ;  classes - хранит проверенные откомпилированные классы;  tmpclasses - хранит непроверенные откомпилированные классы;  tmplib - временная папка для хранения фалов.



Создание проекта в SUN ONE Studio Mobile Edition




Для создания проекту в среде SUN ONE Studio 4 Mobile Edition, необходимо выбрать в меню команду Project => Project Manager, в появившемся окне менеджера проектов изображенного на рис. 3.12, нажмите кнопку New.



Рис. 3.12. Окно менеджера проектов


Вместо окна менеджера проектов появится небольшое диалоговое окно Create New Project, где в поле Project Name необходимо задать имя проекту, например Demo и нажать на кнопку ОК. После этих действий на экране появится окно конфигурации созданного проекта показанное на рис. 3.13.

В окне конфигуратора проектов есть два пункта: Java 2 Standard Edition (J2SE) и Mobile Information Device Profile (CLDC\MIDP), выполненные в виде списка выбираемых элементов. Выбрав один из двух пунктов можно сконфигурировать проект для создания стандартной программы на Java 2 SE, либо приложение для мобильных телефонов если избрать пункт Mobile Information Device Profile (CLDC\MIDP). Выбираем пункт для создания мобильных приложений



Рис. 3.13. Окно конфигуратора проекта


и нажимаем кнопку Finish. После чего в нижней части окна Explorer, к вкладкам Файловые системы, Выполнение и Javadoc, добавится еще одна вкладка Project Demo. Затем необходимо произвести монтирование файловой системы для сконфигурированного проекта. В нижней части окна Explorer, перейдите на вкладку Файловые системы и в появившемся окне нажмите правой кнопкой мыши на надписи Файловые системы. В ответ на эти действия появится череда выпадающих меню, выберите команду Mount => Archive (JAR, Zip), изображенную на рис. 3.14.



Рис.3.14. Вкладка Файловые системы


Выбрав команду Archive (JAR, Zip), вы перейдете к окну New Wizard -Archive (JAR, Zip), с помощью которого производится монтаж необходимой для проекта библиотеки Java API. Все библиотеки скомпонованы в виде архивов, например библиотека для профиля MIDP 1.0, содержится в архиве midpapi.zip. Ситуация здесь несколько запутанная. Как уже говорилось в состав инструментария SUN ONE Studio 4 Mobile Edition входит также среда J2ME Wireless Toolkit версии 1.0.4 01, содержащая архив API для профиля MIDP 1.0. На рис. 3.15 показано окно New Wizard -Archive (JAR, Zip) и подключаемый архив API, находящийся в папке lib среды J2ME Wireless Toolkit 1.0.



Рис. 3.15. Окно New Wizard - Archive (JAR, Zip)


При установке более поздней версии этой интегрированной среды вы сможете подключать API и для профиля МШР 2.0, выбрав соответствующий файл из директории, в которую была установлена среда J2ME Wireless Toolkit 2.1 более поздней версии. Также существует возможность Выбора и других API, предоставляемых конкретным производителем телефонов, в том случае, если вы желаете использовать библиотеку сторонних производителей. В следующей главе будет рассмотрена установка и настройка различных телефонных эмуляторов и программного обеспечения для программирования телефонов разнообразных марок.

После монтирования файловой системы., необходимо также произвести монтаж директории, где будет содержаться исходный код созданного проекта. Монтаж директории происходит по той же схеме, что и монтаж файловой системы, но в выпадающем меню нужно выбрать команду Mount => Local Directory и в появившемся окне New Wizard - Local Directory указать место, где будет храниться исходный код программы, поле чего нажмите кнопку Finish. Создав рабочий каталог для приложения, его необходимо добавить в проект. Нажмите правой кнопкой мыши на только что добавленной директории во вкладке Файловые системы окна Explorer и в появившемся меню выберете команду Tools => Add to Project. Для каждого нового создаваемого проекта, необходимо произвести все выше описанные действия из раздела 3.2.2.



Среда программирования JE Wireless Toolkit




Программный продукт J2ME Wireless Toolkit 2.1 компании Sun Microsystems распространяется бесплатно и представляет упрощенную среду программирования. Механизм работы J2ME Wireless Toolkit 2.1 очень прост: вы создаете проект, размещаете файлы исходного кода в директории J2ME Wireless Toolkit 2.1 и компилируете весь проект. Файлы исходного кода могут быть написаны в любом текстовом редакторе. Потом запускаете готовое приложение на эмуляторах доступных в этой среде программирования и тестируете созданную программу.



Среда программирования SUN ONE Studio Mobile Edition




В директории \SDK находится файл ffj_me_win32 - это программа установки интегрированной среды разработки SUN ONE Studio 4 Mobile Edition. После двойного нажатия левой кнопки мыши на этом файле, вы увидите окно с приветствием, нажав на кнопку Next, вы попадете в окошко с лицензионным соглашением. Ознакомившись с соглашением и нажав на кнопку Next, на экране монитора появится диалоговое окно SUN ONE Studio 4 update 1, Mobile Edition Setup, изображенное на рис. 3.2.



Рис. 3.2. Окно SUN ONE Studio 4 update 1, Mobile Edition Setup


В этом и следующем окне необходимо определиться с директорией, в которой будет размещаться устанавливаемый инструментарий, после чего появится диалоговое окно, показанное на рис. 3.3, где перечисляются компоненты установки. Путь, задающий директорию для установки SUN ONE Studio 4 Mobile Edition не должен содержать пробелов.

Окно выбора компонентов содержит элементы для установки. Как видно из рис. 3.3 инсталлируется не только J2ME Wireless Toolkit, но и Java 2iPlatform Micro Edition, которая также может поставляться отдельно и лежит на компакт-диске в каталоге \SDK (в том случае если вы предпочитаете работать с командной строкой).



Рис. 3.3. Окно выбора компонентов к установке


Два последующих окна носят скорее информационный характер, просто на жмите кнопку Next и мастер установки начнет свою работу по инсталляции cреды программирования SUN ONE Studio 4 Mobile Edition на компьютер.



Упаковка программ




При создании проекта и последующей компиляции исходного кода, у вас появятся два файла: JAD-файл и файл манифеста. Если вы работаете с Sun ONE Studio, то оба файла будут находиться в рабочем каталоге проекта. Если вы используете среду программирования J2ME Wireless Toolkit, то JAD-файл и файл манифеста будут помещены в папку \bin рабочего каталога приложения. Давайте отталкиваться от созданного в разделах 3.2.3 и 3.3.2 проекта Demo и мидлета HellpMIDlet. В этом случае в соответствующих директориях двух средах программирования будут находиться два файла: Demo.jad и MANIFEST.MF.

Установка Java SDK SE




Двойной щелчок левой кнопки мышки на файле j2sdk-1_4_2_03-windows-i586-p из каталога \SDK,  приведет к распаковке архива. Далее появится окно с лицензионным соглашением, нажав на кнопку Next, вы попадете в окно Java 2 SDK SE vl.4.2_03 - Custom Setup, изображенное на рис. 3.1.

В этом диалоговом окне вам будет предложено выбрать каталог и тип установки. Нам нужны все компоненты, поэтому нажмите кнопку Next. В следующем окне вам необходимо выбрать браузер для интеграции Java, остановите свой выбор на необходимом и подтвердите свои действия, после чего начнется процесс установки, в конце которого вам предложат перезагрузить компьютер. После установки Java 2 SDK, можно приступать к инсталляции SUN ONE Studio 4 Mobile Edition и J2ME Wireless Toolkit.

Сразу хотелось бы остановиться на некоторых особенностях возникающих при инсталляции. Обе среды программирования независимы друг от друга, но в составе, а точнее в комплекте с SUN ONE Studio 4 Mobile Edition, входит J2ME Wireless Toolkit версии 1.0.4 01, но изданный момент уже имеется J2ME Wireless Toolkit версии 2.1. Такая путаница обусловлена как раз тем, что оба продукта независимы друг от друга и развиваются параллельно. Начнем установку с более мощной среды SUN ONE Studio 4 Mobile Edition.



Рис. 3.1. Окно Java 2 SDK, SE v1.4.2_03 - Custom Setup

Установка JE Wireless Toolkit




В папке \SDK находится файл j2me_wireless_toolkit-2_1-windows. Двойной щелчок на этом файле приведет вас в программу установки среды программирования J2МЕ Wireless Toolkit. В первом появившемся окне программы установки Java Virtual Machine Location, показанном на рис. 3.22, необходимо указать путь в директорию, где у вас установлена виртуальная Java машина.



Рис. 3.22. Окно программы установки Java Virtual Machine Location


Если при установке пакета Java 2 SDK SE, вы не изменяли директорию для виртуальной машины, то оставьте прописанный путь, указанный в окне программы установки Java Virtual Machine Location и нажмите кнопку Next. В следующем окне Choose Destination Location, изображенном на рис. 3.23, нужно выбрать место для установки среды программирования J2ME Wireless Toolkit 2.1.



Рис. 3.23. Окно Choose Destination Location


При задании директории нельзя прописывать путь с пробелами, а лучше оставить директорию по умолчанию, выбранную программой установки, иначе в последствии у вас возникнет масса проблем при компиляции исходных кодов. Нажав на кнопку Next в окне Choose Destination Location, подождите конца установки среды программирования J2ME Wireless Toolkit 2.1.

После установки программы, зайдите в меню ПУСК => Все программы => J2ME Wireless Toolkit 2.1 => KToolbar и у вас на экране появится рабочее окно J2ME Wireless Toolkit, показанное на рис. 3.24, где и происходит основная работа над проектами по созданию приложений для мобильных устройств.



Рис. 3.24. Рабочее окно J2ME Wireless Toolkit


Линейка меню среды программирования J2ME Wireless Toolkit, содержит четыре команды, щелкните мышей на названии любой из команд и вы откроете выпадающее меню. Каждое из выпадающих меню содержит ряд команд, разберем основные из них.

Меню File

 New Project - создает новый проект;  Open Project - открывает проект;  Save Console - сохраняет информацию с консоли;  Utilities - утилиты;  Exit - выход.


Меню Edit

 Preferences - свойства проекта;  Clear Console - отчистить консоль.


Меню Project

 Build - компиляция проекта;  Clean - закрывает открытый проект;  Run - запуск откомпилированной программы;  Package - упаковка проекта;  Debug - отладка;  Settings - установки проекта.



В предыдущей главе вы познакомились




В предыдущей главе вы познакомились с общей архитектурой платформы Java 2 ME, в этой главе вашему вниманию будут представлены две интегрированные среды для разработки мобильных приложений - это SUN ONE Studio 4 Mobile Edition и J2ME Wireless Toolkit 2.1. Обе среды распространяется бесплатно и разработаны в недрах компании Sun Microsystems. Данные инструментарии можно скачать с сайта самой компании. Предлагаемые к изучению инструментарии, в отличие от других сред программирования, адаптированы именно для создания приложений для мобильных устройств, поэтому будут рассмотрены и использованы в этой книге.

Прежде чем приступить к инсталляции SUN ONE Studio 4 Mobile Edition и J2ME Wireless Toolkit 2.1, необходимо установить набор инструментальных средств Java 2 SDK, SE vl.4.2_03 (Software Development Toolkit Standard Edition). Это последняя на данный момент версия библиотеки, предоставляющая программные средства для создания приложений на Java. В состав этой библиотеки также входит Java 2 Runtime Environment, SE vl.4.2_03, которая необходима для работы приложений написанных на Java.