DataLife Engine > Программирование > Hello, World! (Программирование на J2me)

Hello, World! (Программирование на J2me)


16 ноября 2007. Разместил: SlaDER
Создание мидлета

Итак, для создания мидлета остановимся на одном из перечисленных в первой
статье средств разработки J2ME Wireless Toolkit (WTK), с помощью которого
реализованы все приведенные в этой книге примеры. После установки Wireless Toolkit запускаем его основную утилиту KToolbar. Доступные после запуска действия — это NewProject (Новый проект) и OpenProject (Открыть проект).

Можно открыть демонстрационные проекты и на готовых примерах рассмотреть возможности и особенности языка, но мы создадим новый проект и назовем его MyFirstMidlet[i]. Так же назовем и основной класс мидлета [i](MIDlet Class Name) в окне создания нового проекта.

Hello, World! (Программирование на J2me)


После нажатия кнопки Create Project (Создать проект) появится диалоговое окно ввода информации для файла — описателя приложения. Диалоговое окно состоит из нескольких вкладок, первая из которых — API Selection, здесь выбираем нужную платформу.

Hello, World! (Программирование на J2me)


Следующая вкладка Required (Обязательные) — содержит обязательные атрибуты файла-описателя

Hello, World! (Программирование на J2me)


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

Hello, World! (Программирование на J2me)


На этом этапе в папке нашего проекта было создано еще несколько директорий, в одну из которых, /classes, и было помещено откомпилированное приложение, представленное файлом MyFirstMidlet.class. Сгенерированный компилятором файл уже является программой, готовой к исполнению на эмуляторе телефона. Чтобы запустить написанное нами приложение, в списке Device (Аппарат) панели управления утилиты KToolbar нужно выбрать один из стандартных или установленных нами эмуляторов. Эмулятор вместе с созданным нами приложением запускается с помощью команды Run (Запустить) панели управления. По умолчанию приложение запустится в эмуляторе с многообещающим названием ”DefaultGrayPhone”.

Упаковка мидлета

Заключительным этапом создания полноценного мобильного приложения, готового для загрузки в телефон, является упаковка созданных файлов в jar-архив, который уже пригоден для загрузки в мобильный телефон. Для упаковки приложения следует выбрать в меню Project (Проект) утилиты KToolbar команду Create Package (Создать архив). После упаковки в папке /bin нашего приложения появился файл MyfirstMidlet.jar. Это и есть нужный нам jar-архив. Современные архиваторы типа WinZIP или WinRAR поддерживают этот формат и позволяют нам заглянуть внутрь сформированного архива. Ничего нового там мы не увидим, только все тот же файл MyFirstMidlet.class и файл манифеста в папке META-INF.