ГлавнаяНеобходимые приложенияНастройка приложенийГлавный классВысокоуровневое программированиеНизкоуровневое программированиеФайл манифестаСохранения. Работа с RecordStoreРабота с таймеромПолезные ссылкиОб автореСайт ФПМиКТСтуденческий сайт
Сайт о Java ME

Главный класс

Перейдем к рассмотрению главного класса. Если вы выбрали создание "Hello" мидлета, то уже видите, что он из себя представляет. Давайте пока выкинем из него все ненужное и рассмотрим главный класс в отдельности. Вот как он выглядит:

Файл HelloMIDlet.java

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class HelloMIDlet extends MIDlet{

    public HelloMIDlet() {
    }

    public void startApp() {
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }
}
Пример В данном классе есть:
  1. Конструктор (HelloMIDlet). Здесь можно инициализировать необходимые переменные, можно оставить конструктор без изменений.
  2. Метод startApp. Именно отсюда начинает работу приложение.
  3. Метод pauseApp. Метод, вызываемый при сворачивании приложения. Указывает мидлету освободить все возможные ресурсы, закрыть потоки и соединения. На некоторых телефонах не используется.
  4. Метод destroyApp(boolean unconditional). Метод, вызываемый при закрытии приложения. Также указывает мидлету освободить все ресурсы. В качестве параметра unconditional передается true или false. Если было послано значение false, то можно сгенерировать исключение MIDletStateChangeException и не завершать работу приложения.

Некоторые источники утверждают, что в методе destroyApp обязательно нужно обнулять все ссылочные переменные, иначе необнуленные переменные не сможет собрать сборщик мусора и они останутся "висеть" в телефоне и мешать работать другим приложениям. Сам я это не проверял, но если так говорят, то почему бы не поверить?

Самый простой способ программно завершить работу мидлета, это вызвать друг за другом методы destroyApp и notifyDestroyed главного класса.

Если у вас не работают данные методы, либо что-то другое, например, не происходит обработка нажатий commandAction, проверьте программу на вечные циклы. Их быть не должно.

Для переименования главного класса не достаточно заменить все вхождения имени в программу. Для полного изменения имени необходимо переименовать соответствующий файл и зайти в "Свойства" - "Дескриптор приложения" - "Мидлет" ("Properties" - "Application descriptor" - "MIDlets" и вписать в нужное поле новое имя класса (если кто-то знает способ попроще, можете написать мне о нем)

Программа написана, но никакой радости от нее нет, так как при запуске на экран ничего не выведется. Давайте тогда разберем один из примеров, генерируемых нашей программой

Файл HelloMIDlet.java

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class HelloMIDlet extends MIDlet implements CommandListener {

    private Command exitCommand; 
    private Display display;     

    public HelloMIDlet() {
        display = Display.getDisplay(this);
        exitCommand = new Command("Exit", Command.EXIT, 0);
    }

    public void startApp() {
        TextBox t = new TextBox("Hello", "Hello, World!", 256, 0);

        t.addCommand(exitCommand);
        t.setCommandListener(this);

        display.setCurrent(t);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        exitCommand=null;
        display=null;
    }

    public void commandAction(Command c, Displayable s) {
        if (c == exitCommand) {
            destroyApp(false);
            notifyDestroyed();
        }
    }
}
Как мы видим, в конструкторе класса происходит получение экземпляра дисплея методом Display.getDisplay(this) а также создается команда (на экране это будет выглядеть как кнопка, находящаяся внизу слева или справа. Подробнее команды будут рассмотрены в главе "интерфейс CommandListener"). В методе startApp создается текстовое поле TextBox и добавляется команда exitCommand, созданная в конструкторе (t.addCommand(exitCommand); t.setCommandListener(this)), также созданная команда выводится на экран (display.setCurrent(t);) В методе commandAction (он также будет подробнее рассмотрен в главе "интерфейс CommandListener") происходит обработка нажатий клавиш В методе destroyApp происходит обнуление созданных переменных После запуска этого приложения вы должны увидеть что-то вроде этого
Назад	Далее