19.10 Java 2 Micro Edition
Die J2ME bietet Unterstützung für Konsumgeräte wie PDAs und Mobiltelefone. Die ME besteht, vergleichbar der J2SE, aus einer virtuellen Maschine und einem Satz von Bibliotheken - die allerdings verglichen mit dem Original mächtig abgespeckt haben. Die VM kann auch auf Ressourcen von 128 bis zu 512 KB und einem 16- oder 32-Bit-Prozessor mit 16-32 MHz arbeiten. Der Programmcode der VM ist selbst nur 40 bis 80 KB groß. Die Datenanbindung ist mit 9.600 Baud spezifiziert. Die Winzig-Variante setzt auf Betriebssysteme wie ein »großes« Linux oder Windows auf, aber genauso gut auf Symbian OS (dem bekanntesten Betriebssystem für mobile Endgeräte), PalmOS oder WinCE. Das ist die unterste Ebene der Micro Edition. Wir werden gleich sehen, dass verschiedene Konfigurationen unterschiedliche Anforderungen stellen. Die Darstellung ist technisch und greift etwas vor.
19.10.1 Konfigurationen
Eine Konfiguration beschreibt die Grundfunktionen der Maschine. Dazu gehören fundamentale Basisklassen, aber auch die Unterstützung für Fließkommaoperationen. Zusätzlich beschreibt eine J2ME-Konfiguration auch eine VM. Zwei Konfigurationen sind zur Zeit von Sun spezifiziert: CLDC und CDC.
Connected Limited Device Configuration (CLDC)
Die CLDC-Konfiguration ist für kleinere Geräte wie Handys, einfache PDAs, Pagers oder Mobiltelefone definiert - daher steht auch das L: Limited. Die Geräte verfügen über einen Speicher von 128-512 KB. Sie können Netzverbindungen mit maximal 9.600 bps betreiben und arbeiten in der Regel mit Batterie. Das CLCD nutzt eine eigene virtuelle Maschine, die KVM1 genannt wird. Für den Palm-Pilot ist zum Beispiel eine Implementierung der KVM verfügbar, ebenfalls für Mobiltelefone. Sie ist nicht für 8-Bit-Systeme gedacht. Diesen Bereich deckt die JavaCard besser ab. Hersteller wie IBM haben eigene virtuelle Maschinen im Angebot, die oft schneller in der Ausführung sind. Da die KVM für die CLDC-Konfiguration in der Regel bescheiden ist, definiert der Standard keine Fließkommazahlen mit den Datentypen float und double.
Die Pakete der J2ME sind eine Teilmenge der J2SE, insbesondere java.lang (VM-Systemklassen) und java.io (Datei-Ein-/Ausgabe). Mit der neuen Bibliothek Generic Connection Framework kann ein mobiles Gerät Verbindungen zur Außenwelt aufbauen und verwalten.
Beispiel Lade eine Textdatei in einen StringBuffer.
String url = http://www.java-tutor.com/aufgaben/bond.txt";
StringBuffer b = new StringBuffer();
StreamConnection c = (StreamConnection) Connector.open( url );
InputStream s = c.openInputStream();
for ( int c; ( (ch = s.read() ) != -1; )
b.append( (char) ch );
|
Connected Device Configuration (CDC)
Die CDC unterstützt Geräte, die leistungsfähiger als die CLDC-Geräte sind. Damit sind zum Beispiel SetTop-Boxen, Kopierer, Bildtelefone, leistungsfähigere PDAs, PocketPCs oder auch Spielkonsolen gemeint. Sie besitzen mindestens 512 KB ROM und 256 KB RAM und verfügen über eine Netzwerkverbindung von über 9.600 Baud. Die Konfiguration soll prinzipiell mit einer herkömmlichen JVM laufen und aufwärts kompatibel zur J2SE sein. Die Laufzeitumgebung wird CVM genannt. Im Unterschied zur herkömmlichen VM kommt sie mit weniger Speicher aus.
19.10.2 Profile
Profile setzen direkt auf Konfigurationen auf und erweitern diese etwa um grafische Oberflächen, implementieren Netzwerkprotokolle und geben Möglichkeiten zur Datenhaltung (Persistenz). Sie bildet damit eine API, um komplette Applikationen zu entwickeln.
Da es unterschiedliche Zielgeräte mit unterschiedlichen Anforderungen gibt, wird auch hier wieder zwischen Profilen für die Konfiguration CLDC und CDC unterschieden. Profile werden im Java Community Process verabschiedet. Das wichtigste Profil ist:
Mobile Information Device Profile (MIDP)
Das Profil MIDP wurde für die Konfiguration CLDC entwickelt und definiert eine API für Geräte mit persistentem Speicher und Benutzerschnittstellen. Für die API grafischer Oberflächen ist das LCDUI definiert. In der Implementierung fällt eine gewisse Ähnlichkeit zu Applets auf, und daher nennen sich die Applikationen auch Midlets. Midlets haben keine main()-Methode, sondern erben wie Applets von einer (abstrakten) Oberklasse javax.microedition. midlet.MIDlet.
Hier klicken, um das Bild zu Vergrößern
Abbildung 19.1 Ein einfaches Midlet
Beispiel Ein Midlet, welches eine Schaltfläche anzeigt
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class HelloMIDlet extends MIDlet implements CommandListener
{
private Command exitCommand;
private Display display;
public HelloMIDlet()
{
display = Display.getDisplay( this );
exitCommand = new Command( "Ende", Command.SCREEN, 2);
}
|
public void startApp()
{
TextBox t = new TextBox( "Hello MIDlet", "Wireless Internet", 256, 0 );
t.addCommand( exitCommand );
t.setCommandListener( this );
t.setTicker( new Ticker("J2ME is cool") );
display.setCurrent( t );
}
public void pauseApp() { }
public void destroyApp( boolean b ) { }
public void commandAction( Command c, Displayable s )
{
if ( c == exitCommand )
{
destroyApp( false );
notifyDestroyed();
}
}
}
|
Zusätzlich zu der LCDUI-Bibliothek (Highlevel-API) kann jedes Gerät eigene Lowlevel-APIs anbieten. MIDP implementiert für das Generic Connection Framework die Klasse HttpConnection.
Mit dem Record Management System (RMS) lassen sich Daten in binären Tabellen speichern.
Beispiel Über ein RecordStore lassen sich Daten im RMS speichern. Jeder Datensatz wird mit einer ID verbunden. Das Beispiel speichert eine Zeichenkette und holt sie später wieder aus dem Speicher.
RecordStore rs = RecordStore.openRecordStore( "daten", false );
byte speichern[] = "Ulli".getBytes();
int id = rs.addRecord( speichern, 0, speichern.length );
byte holen[] = new byte[100];
int gelesen = rs.getRecord( id, holen, 0 );
|
Die Zusätze liegen im Paket javax.microedition.
Einen guten Einstieg gibt die Seite http://wireless.java.sun.com/midp/articles/getstart/ beziehungsweise ganz allgemein http://wireless.java.sun.com/.
Weitere Profile
Andere Profile sind in Vorbereitung beziehungsweise geplant. Das MIDP ist bisher sehr gut ausgereift. Ein weiteres Profil ist das Personal Digital Assistant Profile (PDAP). Es ist speziell für PDAs entworfen und basiert auf der CLCD-Konfiguration. Eine Untermenge des AWT beschreibt grafische Oberflächen.
1 Auch wegen der vielen Ks ...
|