ورود

View Full Version : سوال: خروج از برنامه خارج از کلاس MIDlet؟



canvas_for
جمعه 13 شهریور 1388, 21:51 عصر
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.*;

public class Midlet extends MIDlet {
Display display;
MIDPCanvas midcanvas;
public void startApp() {
display=Display.getDisplay(this);
midcanvas=new MIDPCanvas();
display.setCurrent(midcanvas);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
notifyDestroyed();
}
}


******************************




import javax.microedition.lcdui.*;

public class MIDPCanvas extends Canvas implements CommandListener {
Midlet midlet;
public MIDPCanvas() {
try {

setCommandListener(this);

addCommand(new Command("Exit", Command.EXIT, 1));
} catch(Exception e) {

}
}

public void paint(Graphics g) {
g.drawString("Sample Text",0,0,Graphics.TOP|Graphics.LEFT);
}

public void commandAction(Command command, Displayable displayable) {

midlet.notifyDestroyed(); //here
}

}

من می خواهم جایی که نوشته شده here برنامه تمام شود ولی این دستور اجرا نمی شود
(منظورم نوشتن notifyDestroyed() در خارج از کلاس میدلت هست یا هر جور خروج دیگه)
کسی می تواند راهنمایی کند؟
با تشکر

mic_r_c
شنبه 14 شهریور 1388, 10:31 صبح
سلام،
نکته اول: چرا در کلاس canvas شی midlet رو initialize نکردی؟
نکته دوم: اگر هم initialize میکردی بازم فایده نداشت. چون میدلت شروع کننده برنامه، یکبار لود میشه و دیگه شی ساختن از اون هم فایده ای نداره.
راه حل اینه که خیلی راحت اشاره گری از کلاس Midlet رو به کلاس های بعدی بفرستی. این شکلی

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

public class Midlet extends MIDlet
{
Display display;
MIDPCanvas midcanvas;

public void startApp()
{
display=Display.getDisplay(this);
midcanvas=new MIDPCanvas(this); //<-- send the Pointer of this class.
display.setCurrent(midcanvas);
}

public void exit()//Use this public methode, in other classes to exit the MIDlet
{
notifyDestroyed();
}
public void pauseApp()
{
}

public void destroyApp(boolean unconditional)
{

}
}


******************************




import javax.microedition.lcdui.*;

public class MIDPCanvas extends Canvas implements CommandListener
{
Midlet midlet;

public MIDPCanvas(Midlet pointer)
{
try {

midlet = pointer; // <<< Set pointer to the Midlet class in a general variant.

setCommandListener(this);
addCommand(new Command("Exit", Command.EXIT, 1));
} catch(Exception e) {}
}

public void paint(Graphics g)
{
g.drawString("Sample Text",0,0,Graphics.TOP|Graphics.LEFT);
}

public void commandAction(Command command, Displayable displayable)
{
midlet.exit(); //here
}
}