Главный класс
Перейдем к рассмотрению главного класса. Если вы выбрали создание "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 происходит обнуление созданных переменных
После запуска этого приложения вы должны увидеть что-то вроде этого
|