Mam prosty programik wyświetlający konfigurację telefonu komórkowego. Potrzebuję wyświetlić między innymi rozdzielczość wyświetlacza, metody getWidth i getHeight dostępne są w Canvas, dlatego stworzyłem dwie klasy. Wszystko działa prawidłowo w emulatorze i program wyświetla szerokość i wysokość wyświetlacza, natomiast w realnej komórce pokazuje rozdzielczość ekranu 0x0, tak, jakby zmienne nie były przekazywane pomiędzy klasami ( MojMIDlet.width = getWidth(); oraz MojMIDlet.height = getHeight(); ).

klasa pierwsza:

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

public class MobiProp extends MIDlet implements CommandListener {
	private SilnikProjektu silnik;
	private Display display;
	private Form props;
	private Command exitCommand = new Command("Koniec", Command.EXIT, 1);
	private StringBuffer propbuf;
	int width, height;
	
	public MobiProp() {
		display = Display.getDisplay(this);
		silnik = new SilnikProjektu(this);
		props = new Form("Konfiguracja systemu");
	}
	
	public void startApp() {
		display.setCurrent(silnik);
		Runtime runtime = Runtime.getRuntime();
                runtime.gc();
		propbuf = new StringBuffer(50);
		props.append("Ekran: x=" + width + " y=" + height + "\n");
                props.append(showProp("microedition.configuration","Konfiguracja"));
                props.append(showProp("microedition.profiles","Profil"));
                props.append(showProp("microedition.platform","Platforma"));
                props.append(showProp("microedition.locale","Lokalizacja"));
                props.append(showProp("microedition.encoding","Strona kodowa"));
		props.append("----------------------");
		props.append("\n");
		
		props.addCommand(exitCommand);
                props.setCommandListener(this);
		
		display.setCurrent(props);
	}

	public void commandAction(Command c, Displayable s) {
        if (c == exitCommand) {
            destroyApp(false);
            notifyDestroyed();
        }
    }
    String showProp(String prop, String opis) {
        String value = System.getProperty(prop);
        propbuf.setLength(0);
        propbuf.append(opis);
        propbuf.append(": ");

        if (value == null) {
            propbuf.append("<undefined>");
        } else {
            propbuf.append("\"");
            propbuf.append(value);
            propbuf.append("\"");
        }

        propbuf.append("\n");

        return propbuf.toString();
    }	
	public void pauseApp() {
    }

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

i klasa druga, która ma za zadanie przekazać do klasy pierwszej dane o rozdzielczości wyświetlacza:

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

class SilnikProjektu extends Canvas  {
	private MobiProp MojMIDlet;

	public SilnikProjektu(MobiProp MojMIDlet) {
		this.MojMIDlet = MojMIDlet;
	}

	public void paint(Graphics g) {
		MojMIDlet.width = getWidth();
		MojMIDlet.height = getHeight();
	}
	
	protected void keyPressed(int key) {
	}
}