Главный класс
Перейдем к рассмотрению главного класса. Если вы выбрали создание "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) {
    }
}
 
 
В данном классе есть: 
- Конструктор (HelloMIDlet). Здесь можно инициализировать необходимые переменные, можно оставить 
конструктор без изменений.
 
- Метод startApp. Именно отсюда начинает работу приложение.
 
- Метод pauseApp. Метод, вызываемый при сворачивании приложения. Указывает мидлету освободить все 
возможные ресурсы, закрыть потоки и соединения. На некоторых телефонах не используется.
 
- Метод 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 происходит обнуление созданных переменных
После запуска этого приложения вы должны увидеть что-то вроде этого
 |