Создание мидлетаИтак, для создания мидлета остановимся на одном из перечисленных в первой
статье средств разработки
J2ME Wireless Toolkit (WTK), с помощью которого
реализованы все приведенные в этой книге примеры. После установки
Wireless Toolkit запускаем его основную утилиту
KToolbar. Доступные после запуска действия — это
NewProject (Новый проект) и
OpenProject (Открыть проект).
Можно открыть демонстрационные проекты и на готовых примерах рассмотреть возможности и особенности языка, но мы создадим новый проект и назовем его
MyFirstMidlet[i]. Так же назовем и основной класс мидлета [i](MIDlet Class Name) в окне создания нового проекта.
После нажатия кнопки
Create Project (Создать проект) появится диалоговое окно ввода информации для файла — описателя приложения. Диалоговое окно состоит из нескольких вкладок, первая из которых —
API Selection, здесь выбираем нужную платформу.
Следующая вкладка
Required (Обязательные) — содержит обязательные атрибуты файла-описателя
• MIDlet-Jar-Size — размер jar-файла в байтах. Обратите внимание, что данный
атрибут прописывается в файле описателя автоматически средствами WTK
при упаковке проекта. Будьте аккуратны при ручном редактировании jar-архива: несовпадение заявленного и реального размеров jar-файла послужит причиной ошибки при загрузке приложения в телефон;
• MIDlet-Jar-URL — сетевой адрес и название jar-файла. В нашем случае это поле
содержит лишь имя jar-файла;
• MIDlet-Name — имя мидлета (или комплекта мидлетов), которое будет показа-
но пользователю в меню запуска приложения;
• MIDlet-Vendor — разработчик приложения (организация или частное лицо);
• MIDLet-Version — версия мидлета в формате
.
.
; может
быть использована при установке и обновлении приложения;
• MicroEdition-Configuration — требуемая конфигурация J2ME для выполнения
мидлета. В рамках нашей книги используется конфигурация CDLC-1.0;
• MicroEdition-ProfiLe — требуемый профайл J2ME для выполнения мидлета. Здесь
мы рассматриваем работу с профайлом MIDP-1.0.
Поля ввода значений необязательных атрибутов расположены на вкладке Optional(Факультативные):
• MIDlet-Data-Size — минимальное количество байт данных для постоянного хранения, требуемое мидлетом. Значение поля по умолчанию — ноль;
• MIDlet-Delete-Confirm — определяет, должна ли система запрашивать подтверждение пользователя при удалении приложения из устройства;
• MIDlet-Description — описание мидлета или набора мидлетов;
• MIDlet-Icon — имя графического файла .png в jar-архиве, который будет использован системой для данного мидлета в меню запуска приложений;
• MIDlet-Info-URL — сетевой адрес с описанием приложения или информацией
о разработчике;
• MIDlet-Install-Notify — указывает, должна ли система уведомлять пользователя
перед установкой нового мидлета.
Разработчик также имеет возможность определить собственные атрибуты приложения на вкладке
User Defined (Определенные пользователем). Имена атрибутов не должны начинаться с префикса MIDlet- и могут быть получены во время выполнения приложения с помощью метода
getAppProperty (String key) класса
MIDIet. После того как все необходимые атрибуты указаны, нажимаем кнопку ОК и получаем сообщение о том, что проект был успешно создан. Разберемся, что в данный момент произошло. Для этого перейдем в папку, где установлен
Wireless Toolkit. В каталоге проектов apps появилась новая папка с именем нашего проекта
MyFirstMidlet.
В корневом каталоге нашего проекта были автоматически созданы еще несколько папок. Рассмотрим их назначение:
• /bin — папка для хранения файлов приложения: jar-архив приложения, файл
описателя приложения .jad и файл манифеста MANIFEST.MF. Автоматически созданные файлы MyFirstMidlet.jad и MANIFEST.MF содержат указанные при создании проекта атрибуты;
• /res — файлы ресурсов, используемые приложением во время выполнения. Файлы могут содержать текстовые или бинарные данные, картинки в формате
PNG (Portable Network Graphics).
• /src — исходные файлы приложения, содержащие собственно код программы. Файлы должны иметь расширение .Java. Пришло время перейти непосредственно к программированию, уверен, что вам уже надоело читать это скучное введение и уже не терпится перейти со своим
телефоном ”на ты”. К сожалению, среда
Wireless Toolkit не содержит текстового редактора, поэтому нам потребуется любой другой редактор, на худой конец
обычный блокнот. Достаточно простые и удобные в обращении, с моей точки зрения, такие редакторы, как
IntelliJ IDEA,
UltraEdit или
EditPlus, хотя опять же это дело вкуса, данный вопрос не принципиален, можете пользоваться и блокнотом.
Импорт классов и пакетов
Начнем с того, что классы, предоставляемые нам реализацией
J2ME, объединены в пакеты, представляющие группу классов определенной тематики. Для компилятора имя класса составляют название класса и полное название пакета, где он содержится. Такое имя может быть достаточно длинным, поэтому можно импортировать класс с помощью оператора import, а в дальнейшем пользоваться лишь названием класса. Синтаксис оператора import достаточно простой:
import .:Таких операторов может быть сколько угодно. Они должны располагаться в самом начале программы. Существует возможность импортировать сразу все классы, содержащиеся в пакете. Для этого в операторе import вместо определенного имени класса следует указать символ *:
import .*Для знатоков языка C++ и основ объектно-ориентированного программирования отметим, что import не является аналогом директивы include языка С, поскольку никакие файлы во время импорта не подключаются. Реализация J2ME, которую мы рассматриваем, включает в себя следующие пакеты, классы которых мы будем рассматривать подробно на протяжении всей книги:
• java.iо — классы работы с потоками ввода и вывода данных;
• java.lang — классы типов данных языка J2ME, а также некоторые системные
классы;
• java.util — классы дополнительных утилит, реализующие структуры данных, а также работу со временем;
• javax.microedition.io — классы, обеспечивающие сетевые соединения;
• javax.microedition.Icdui — классы пользовательского интерфейса профайла MIDP;
• javax.microedition.midlet — содержит единственный класс MIDIet, являющийся основным классом мобильного приложения;
• javax.microedition.rms — классы поддержки долговременного хранения данных.
Итак, первой строчкой нашей программы мы импортируем основной класс мобильного приложения:
import javax.microedition.midiet.MIDlet;Далее мы импортируем класс Форм, который является определенного рода контейнером, который может содержать различные визуальные элементы, такие как текстовые строки, поля символьного ввода, картинки, меню выбора, шкалы:
import javax.microedition.lcdui.Form;Последний класс, который мы будем импортировать в этом примере это класс
Display. Он нужен для того чтобы отобразить нашу форму на экране. Объект класса
Display создается автоматически реализацией
MIDP при запуске мидлета и сохраняется до вызова функции destroyApp(). Самим такой объект создать нельзя, зато можно получить ссылку на него с помощью метода
getDisplay(MIDIet), который принимает в качестве аргумента ссылку на текущий мидлет.
import javax.microedition.lcdui.Display;Далее реализуем свой собственный класс
MyFirstMidlet, расширяющий класс
MIDIet. Как уже говорилось, обязательны к реализации три абстрактных метода класса
MIDiet. Они могут быть и пустыми, но присутствовать в нашем классе обязаны. В методе
startApp() получим атрибут имени приложения с помощью метода
getAppProperty(String key) класса
MIDIet и отобразим его на форме вместе с сакраментальным
”Hello, World!”
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Display;
public class MyFirstMidlet extends MIDlet{
private Form form; // форма, отображаемая на экране
private Display display; // менеджер дисплея
public void startApp(){
// получить ссылку на менеджер дисплея
display = Display.getDisplay(this);
// создать новую форму
form = new Form("Hellow, World!");
// получить строку атрибута имени мидлета
String name = getAppProperty("MIDlet-Name");
// добавляем к строке Hellow, World!
name+=" Hellow, World! ";
// добавляем строку на форму
form.append(name);
// выводим форму на экран
display.setCurrent(form);
}
public void pauseApp(){
}
public void destroyApp(boolean unconditional){
// уведомить систему о завершении
notifyDestroyed();
}
}
Обратим внимание на то, что мы не импортировали класс
String из пакета
java.lang, но без особых проблем используем их в нашей программе. Все верно. Дело в том, что пакет
java.lang просматривается компилятором всегда и в импорте не нуждается.
Компиляция и запуск мидлетаПосле того как весь код нашего первого приложения написан, сохраним получившийся файл в папке исходных файлов приложения
/src с именем
MyfirstMidlet.java. Заметим, что
имя файла должно полностью совпадать с именем основного класса приложения, иначе компилятор выдаст следующую ошибку:
Class MyFirstMidlet is public, should be declared in a file named MyFirstMidlet.java. Половина дела сделана, хотя пока что написанная программа является не более, чем простым текстом, который теперь нужно преобразовать в настоящее мобильное приложение. Этим вопросом занимается компилятор — специальная программа, переводящая написанный нами текст в машинные команды, понимаемые устройством. Для того чтобы откомпилировать наше приложение, следует выбрать команду
Build (Компилировать) на панели управления главного окна
KToolbar. В основном окне утилиты
KToolbar мы увидим результат компиляции — количество ошибок в программе, местонахождение и описание каждой из них. Если все в порядке, то отобразится сообщение о том, что компиляция прошла успешно
На этом этапе в папке нашего проекта было создано еще несколько директорий, в одну из которых,
/classes, и было помещено откомпилированное приложение, представленное файлом
MyFirstMidlet.class. Сгенерированный компилятором файл уже является программой, готовой к исполнению на эмуляторе телефона. Чтобы запустить написанное нами приложение, в списке
Device (Аппарат) панели управления утилиты
KToolbar нужно выбрать один из стандартных или установленных нами эмуляторов. Эмулятор вместе с созданным нами приложением запускается с помощью команды
Run (Запустить) панели управления. По умолчанию приложение запустится в эмуляторе с многообещающим названием
”DefaultGrayPhone”.
Упаковка мидлетаЗаключительным этапом создания полноценного мобильного приложения, готового для загрузки в телефон, является упаковка созданных файлов в jar-архив, который уже пригоден для загрузки в мобильный телефон. Для упаковки приложения следует выбрать в меню
Project (Проект) утилиты
KToolbar команду
Create Package (Создать архив). После упаковки в папке
/bin нашего приложения появился файл
MyfirstMidlet.jar. Это и есть нужный нам jar-архив. Современные архиваторы типа
WinZIP или
WinRAR поддерживают этот формат и позволяют нам заглянуть внутрь сформированного архива. Ничего нового там мы не увидим, только все тот же файл
MyFirstMidlet.class и файл манифеста в папке
META-INF.