I trying to do a very simple MIDlet using Model-View-Controller pattern.
It works good first time, but after exit it doesn't restart. No error message.
Maybe I miss something about 'MIDlet life cycle' or something like that.
Help, please.
Code:// Controller ====================== package mymidlet.controller; import java.util.Hashtable; import java.util.Enumeration; import java.util.Vector; import javax.microedition.lcdui.Displayable; import mymidlet.MIDlet; import mymidlet.ui.*; public class Controller { private MyMIDlet midlet; private static Controller controller; private StartUI startUI; private Hashtable uiMapping; private Controller(MIDlet midlet){ this.midlet = midlet; } private void init(){ startUI = new StartUI(this); uiMapping = new Hashtable(); uiMapping.put("startUI", startUI); } public static final synchronized Controller getInstance(MIDlet midlet){ if (controller == null){ controller = new Controller(midlet); controller.init(); } return controller; } public void exit(){ this.midlet.exitApp(); } public void show(String uiName){ Displayable d = (Displayable) uiMapping.get(uiName); if (d != null){ midlet.showDisplayable(d); } } } // MainClass ================== package mymidlet; import javax.microedition.lcdui.*; import javax.microedition.midlet.MIDlet; import midlet.controller.Controller; public class MyMIDlet extends MIDlet { private static Display display = null; private Controller controller; public void startApp(){ if (display == null){ display = Display.getDisplay(this); } if (controller == null){ controller = Controller.getInstance(this); } controller.show("startUI"); } public void pauseApp () {} public void destroyApp(boolean unconditional) {} public void exitApp(){ try { destroyApp(false); notifyDestroyed(); } catch (Exception ex){ ex.printStackTrace(); } } public void showDisplayable(Displayable d){ display.setCurrent(d); } } // View ================== package mymidlet.ui; import javax.microedition.lcdui.*; import javax.microedition.lcdui.List; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import mymidlet.controller.Controller; public class StartUI extends List implements CommandListener{ private Controller controller; private final Command select = new Command("Select", Command.ITEM, 1); private final Command exit = new Command("Exit", Command.EXIT, 2); public StartUI(Controller controller){ super("Midlet",List.IMPLICIT); this.controller = controller; this.append("Exit", null); this.setSelectCommand(select); this.setCommandListener(this); } public void commandAction(final Command c, Displayable d) { if (c == select){ int selectIndex = this.getSelectedIndex(); switch(selectIndex){ case 0: this.controller.exit(); default: break; } } } }

Reply With Quote


