xboot.de
Java-Games Kontakt

MIDlets selbst erstellen > 2 3 4 5

Vorwort
Besonderheiten von MIDlets
Voraussetzungen
Das WTK
Erstes Beispiel
Erklärungen zum Beispiel


Vorwort

Die Zeit der Midlets ist lange vorbei. Dieser Artikel ist daher eine kleine Reise in die Vergangenheit.

Bei diesem Artikel handelt es sich lediglich um eine kleine Einführung in die Welt der Java™2 Micro Edition (J2ME™) und dem Konzept der MIDlets. Es soll auch als kleine Hilfe dienen, um festzustellen ob man ernsthaft MIDlets programmieren möchte. Ist dies nach Durcharbeitung meines Beitrags der Fall, kann ich jedem nur empfehlen ein Buch über dieses Thema zu lesen.
Man sollte über Java™-Grundkenntnisse verfügen, oder zumindest in einer anderen Programmiersprache. Sonst ist der Frust schnell vorprogrammiert. Wer über keinerlei Programmiererfahrungen verfügt, sollte doch erst einmal bei etwas leichterem anfangen. Solange Begriffe wie Klasse, Datentyp, Vererbung und Objekt in Verbindung mit der Programmierung Fremdwörter sind, wird man es schwer haben die Zusammenhänge in der MIDlet-Programmierung zu verstehen. Java™-Programmierer werden dagegen schnell mit der Erstellung von MIDlets zurecht kommen.


Besonderheiten von MIDlets

Ein MIDlet ist ähnlich wie ein Applet aufgebaut. Es kann verschiedene Zustände haben: "Active", "Paused" und "Destroyed"
Im Gegensatz zur J2SE™ ist der in J2ME™ enthaltene Klassenumfang stark reduziert. Es fehlen z.B. die Datentypen float und double für Fließkommazahlen.
Zusätzlich bietet das MIDP (Mobile Information Device Profile) folgende Klassen:
  • javax.microedition.io - Für Netzwerkverbindungen (z.B. HTTP)
  • javax.microedition.lcdui - Für Bildschirmausgaben und -aktionen
  • javax.microedition.midlet - Klasse von der MIDlets erben, definiert MIDP Applikationen
  • javax.microedition.rms - Klasse zum persistenten Speichern von Daten
Neben den Standard-Klassen gibt es auch herstellerspezifische Klassen, z.B. von Nokia oder Siemens. Setzt man solche Klassen ein, ist der Grundsatz von Java™ - die Plattformunabhängigkeit - nicht mehr gegeben.


Voraussetzungen

Um selbst erste Schritte in der MIDlet-Programmierung zu machen, ist es sinnvoll mit einem gewöhnlichen Text-Editor erste Versuche zu starten. Ist das Konzept erst einmal verstanden, kann später auch zu einer Entwicklungsumgebung gegriffen werden.
Als erstes benötigt man einmal das Java™ Software Development Kit (SDK bzw. früher JDK) und das J2ME™ Wireless Toolkit (WTK) von Sun. Die JRE ist nicht ausreichend, es muss dass SDK sein. Beides wird auf der Java™-Seite von Sun zum Download angeboten: http://java.sun.com

Habe ich das SDK und dann das WTK auf meinem System installiert, kann es los gehen. Ich gehe ausschließlich von diesen Voraussetzungen aus. Alternativ dazu kann man das WTK auch in seiner Entwicklungsumgebung einbinden. Informationen dazu findet man im Internet bei Sun oder beim jeweiligen Hersteller.

Das WTK bietet eine komplette Dokumentation der in MIDP enthaltenen Klassen. Die Dokumentation ist sehr ausführlich und leicht verständlich. Sodass man eine benötigte Klasse schnell findet und versteht.


Das WTK

Bevor wir mit dem Erstellen eines ersten Beispiels beginnen, müssen wir im WTK ein neues Projekt anlegen. Dazu starten wir die KToolbar und wählen "New Project" aus. Wir vergeben den Projekt- und den Klassennamen. In beiden Fällen nennen wir es einfach Hello. Das WTK legt nun automatisch einen Verzeichnisbaum an. Der Ordner befindet sich im WTK-Verzeichnis unter apps und heißt so, wie wir den Projektnamen vergeben haben. In diesem Ordner befindet sich ein Unterordner mit dem Namen src. In diesen Ordner kopieren wir den Quellcode unseres Beispiels Hello. Wichtig dabei ist, dass wir den Namen Hello.java verwenden. Ein häufiger Fehler der gerade von Java™-Anfängern gemacht wird, ist die Klasse unter einem anderen Namen zu speichern. Habe ich eine Klasse test, so muss ich die Quelldatei als test.java speichern.


Erstes Beispiel

Beginnen wir nun mit einem einfachen Beispiel. Es muss jetzt noch nicht alles verstanden werden. Es reicht das Ganze erst einmal auf sich wirken zu lassen. Dieses Beispiel zeigt ein Formular mit dem Titel "Hello" am Display an und gibt dem Benutzer die Möglichkeit den Befehl "OK" auszulösen. Anschließend wird das MIDlet beendet.
Dieses Beispiel speichern wir als Hello.java in dem src-Ordner unseres Projektes. Bitte ohne die Zeilennummerierung am Anfang. Der Quelltext steht zusätzlich hier als Datei zur Verfügung.

01 import javax.microedition.lcdui.*;
02 import javax.microedition.midlet.*;
03
04 public class Hello extends MIDlet implements CommandListener {
05     private Form mForm;
06
07     public Hello() {
08         mForm = new Form("Hello");
09         Command okCommand = new Command("OK", Command.OK, 1);
10         mForm.addCommand(okCommand);
11         mForm.setCommandListener(this);
12     }
13
14     public void commandAction(Command c, Displayable d) {
15         destroyApp(true);
16     }
17
18     public void startApp() {
19         Display.getDisplay(this).setCurrent(mForm);
20     }
21
22     public void pauseApp() {}
23
24     public void destroyApp(boolean unconditional) {
25         this.notifyDestroyed();
26     }
27 }
Ist der Quellcode gespeichert, wählen wir im WTK den Punkt "Build". Der Quelltext wird jetzt in Java™ Bytecode kompiliert. Ist der "Build"-Prozess erfolgreich, wählen wir "Run" und genießen unser erstes MIDlet im Emulator.
Wollen wir jetzt daraus eine fertige jad- und jar-Datei machen, wählen wir "Project" -> "Package" -> "Create Package". Das WTK erzeugt dann die beiden Dateien in dem Unterordner bin im Projekt-Ordner.
Fertig ist unser erstes MIDlet.


Erklärungen zum Beispiel

In der Zeile 1 und 2 importieren wir erst einmal die benötigten Klassen.
In Zeile 4 erzeugen wir unsere Klasse mit dem Namen Hello. Diese Klasse hat den Zugriffskontrollmodifikator public. Auf die Klasse kann somit von überall zugegriffen werden (mehr dazu später). Durch das Schlüsselwort extends erbt unsere Klasse von der Klasse MIDlet. Sie verfügt somit über die Eigenschaften und Methoden der Klasse MIDlet. Eine Java-Klasse kann maximal von einer Klasse erben. Mit dem Schlüsselwort implements implementieren wir ein Interface mit dem Namen CommandListener.
In Zeile 5 definieren wir ein Feld der Klasse. Genau gesagt ein Form-Objekt mit dem Bezeichner (Namen) mForm. Als Zugriffskontrollmodifikator verwenden wir privat, dadurch kann auf dieses Feld nur in unserer Klasse zugegriffen werden.
In Zeile 7 bis 12 verwenden wir einen Konstruktor. Ein Konstruktor hat immer den gleichen Namen wie die Klasse selbst. Er wird immer dann aufgerufen, wenn ein neues Objekt aus der Klasse erzeugt wird. Unser Konstruktor wird daher vor dem Start des Midlets aufgerufen (siehe auch J2ME™-Dokumentation).
In den Zeilen 14 bis 26 implemtieren wir einige Methoden. Alle Methoden haben den Modifikator public. Der Wert hinter public gibt den Rückgabetyp der Methode an. In unserem Fall gibt keine Methode einen Wert zurück, also void. Hinter dem Rückgabewert steht in runden Klammer () die Parameterliste. Also welche Werte einer Methode übergeben werden müssen. Den Aufruf einer Methode sehen wir in Zeile 15. Hier wird die Methode destroyApp aufgerufen. Als Parameter wird ihr ein Boolean-Wert übergeben.

Das soll fürs erste genug Theorie gewesen sein.


Nach Oben     Weiter >





© 2002 Steffen Bott
powered by iqbo