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) {
}
}