Я перехожу к Java ME с опытом работы с Java SE (который практически не предполагает использования GUI / ActionListener) и все еще немного дезориентирован из-за отсутствия метода main (). Возможно, мне следует сказать, что я изучил Java SE должным образом, но пытаюсь научить себя Java ME, ища в Google множество страниц «Java ME для чайников», что не идеально. Я предполагал, что мне это сойдет с рук, но сейчас я гораздо менее уверен.
Чтобы запустить и запустить сценарий Java ME, я пишу код для базового класса, но не имею статического метода main (). Вместо этого я расширяю класс MIDlet, а затем пишу методы startApp (), pauseApp () и destroyApp (). Однако эти методы не кажутся статическими (в том смысле, что приложение "hello World", которое я здесь рассматриваю, не создает их как статические методы).
Тогда первый вопрос: когда я запускаю свой мидлет, скажем, на моем телефоне, действительно ли создается экземпляр базового класса в стеке?
После этого я еще больше запутался. По-видимому, ответ на мой первый вопрос - да, и я могу назвать этот экземпляр «этим». Теперь в StartApp () я собираюсь создать форму и отобразить ее. Итак, часть моего кода выглядит так:
public class TestMidlet extends MIDlet implements CommandListener {
List mainForm;
Command comSelect;
protected void startApp() throws MIDletStateChangeException {
mainForm = new List("Menu",List.IMPLICIT);
mainForm.append("this one?",null);
mainForm.append("or this one?",null);
comSelect=new Command("Select",Command.ITEM,1);
mainForm.setSelectCommand(comSelect);
mainForm.setCommandListener(this);
Display.getDisplay(this).setCurrent(mainForm);
}
public void commandAction(Command c,Displayable d) {
// we will end up here when the user makes a selection in mainForm.
}
Я подозреваю, что при запуске мидлета в стеке создается экземпляр TestMidlet. Затем запускается метод startApp (), который создает форму и отображает ее на экране. На мой наивный взгляд, дальше происходит то, что у startApp () заканчиваются команды для выполнения, а затем он завершается.
Второй вопрос: правильно ли я предполагаю, что (а) startApp () действительно завершается, но (б) экземпляр TestMidlet по какой-то причине не становится доступным для сборки мусора, потому что каким-то образом форма поддерживает его через commandListener? На данный момент мне действительно неясно, существует ли текущий стек. По-видимому, дело в том, что безымянный TestMidlet сам является CommandListener и, следовательно, все еще занят, поэтому не хочет становиться доступным для сборки мусора, несмотря на то, что я не вижу ничего, относящегося к нему.
Наконец, когда пользователь делает выбор в форме, этот безымянный экземпляр TestMidlet возвращается в действие в том смысле, что его метод commandAction () начинает выполняться? И, в частности, я все еще могу получить доступ к этому таинственному безымянному экземпляру TestMidlet в его методе commandAction, используя "this"?
У меня все прямо?
mainForm.setSelectCommand
не будет компилироваться, пока вы определяете mainform как lcdui.Form - вы имели в видуmainForm.addCommand
в этом примере кода? - person gnat   schedule 31.01.2012