For and foreach loop example in Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void main(String[] args)
{
  String[] firstNames =
  {
    "Marge", "Homer", "Lisa", "Bart", "Maggie"
  };
 
  System.out.println("- With for loop:");
 
  for (int i = 0; i < firstNames.length; i++)
  {
    System.out.println(firstNames[i]);
  }
 
  System.out.println("- With foreach loop");
 
  for (String name : firstNames)
  {
    System.out.println(name);
  }
}

Mit kXML UTF-8 Dateien lesen

Um UTF-8 Zeichensätze korrekt einlesen zu können, muss man (bei Verwendung der kXML-Bibliothek) den Parser auf UTF-8 einstellen:

1
2
3
4
FileConnection fc = (FileConnection) Connector.open(file:///root1/test.xml);
InputStream is = fc.openDataInputStream();
InputStreamReader reader = new InputStreamReader(is, "UTF-8");
XmlParser parser = new XmlParser(reader);

Zur Sicherheit sollten die XML-Dateien immer mit der Kodierung „UTF-8 ohne BOM“ (einstellbar in Notepad++) abgespeichert werden.

IllegalStateException

Die java.lang.IllegalStateException taucht bei Applikationen aus der Java Micro Edition häufig auf, wenn versucht wird bei einem Form-Objekt mit append ein Item hinzuzufügen, das bereits schon auf dem Form existiert.

Beispiel:

1
2
3
4
        Form neuesForm = new Form("Titelzeile");
        StringItem text = new StringItem("Label","Text");
        neuesForm.append(text);
        neuesForm.append(text);

Das ist verboten. Um dasselbe Objekt erneut dem Form hinzufügen zu können, muss man die ältere Version zuerst mit delete entfernen.

Beispiel:

1
2
3
4
5
        Form neuesForm = new Form("Titelzeile");
        StringItem text = new StringItem("Label","Text");
        neuesForm.append(text);
        neuesForm.delete(0);
        neuesForm.append(text);

Die delete-Methode akzeptiert nur Werte vom Typ Integer. Die „0“ steht für das erste Element, welches dem Form hinzugefügt wurde, die „1“ für das zweite Element, usw.. Mit deleteAll() können alle Element vom Form entfernt werden.

Wo liegt eigentlich root1?

Bei der Entwicklung mit der Java Platform (Micro Edition) benutzt man eine FileConnection, um die Verbindung zu einer Datei (zum lesen oder schreiben) herzustellen. Dabei wird oft der folgende Pfad verwendet:

fc = (FileConnection)Connector.open("file:///root1/");

Doch wo liegt dieser ominöse root1-Ordner? Typischerweise soll root1 das Basisverzeichnis auf dem Handy angeben. Im Java ME SDK muss man den Pfad aber mühseelig suchen. Bei mir ist es:

C:\Dokumente und Einstellungen\Benutzername\javame-sdk\3.0\work\0\appdb\filesystem\root1

Allerdings nur, wenn das ClamshellCldcPhone1 als „Platform“ in den „Properties“ des Projektes festgelegt ist. Würde man etwa das DefaultCldcPhone1 auswählen, dann würde der entsprechende Pfad zum root1-Ordner folgender sein:

C:\Dokumente und Einstellungen\Benutzername\javame-sdk\3.0\work\6\appdb\filesystem\root1\

Das liegt daran, dass jedes emulierte Handy seinen eigenen Ordner (mit entsprechender ID) hat. Die ID des Handys ist in der Titelzeile ablesbar. Der Ordner (benannt nach der ID-Nummer) liegt dann im „work“ Unter-Verzeichnis des Java Micro Edition SDK.


Emuliertes Java-Handy mit dazugehöriger Ordnerstuktur

Corrupt JAR, error while reading

Im Java Platform Micro Edition SDK kann es zur Fehlermeldung: „Corrupt JAR, error while reading“ kommen, wenn man sein Java ME SDK Projekt umbenannt hat. Bei der Umbenennung des Projekts wird nämlich nicht das zu startende MIDlet angepasst.

Beispiel:
Ich habe ein MIDlet namens „HelloMIDlet.java„, welches zum Package „hello“ gehört. Dieses MIDlet benenne ich in „GoodbyeMIDlet.java“ um und entferne die Package-Deklaration. Nun wird das Java ME SDK mir sagen, dass ich meine Dateien in der Ordnerstruktur verschieben muss (weil GoodbyeMIDlet nicht mehr im Package hello ist).

Nachdem die Dateien an die richtigen Positionen verschoben wurden, wird der Compiler beim Bauen des Applets die Meldung „A problem occured during deploying application from http://127.0.0.1:3171/GoodbyeMIDlet.jad“ ausgeben. Man muss sich daher die Projekt-Eigenschaften aufrufen und auf „Application Descriptor“ klicken. Dort geht man dann auf den Reiter „MIDlet“ und sieht wahrscheinlich einen roten Eintrag. Dieser gibt an, dass etwas mit der Zuweisung nicht stimmt. Um den Missstand zu beheben reicht ein Klick auf „Add…“ aus. Dadurch wird bereits das in Frage kommende MIDlet zum Hinzufügen ausgewählt. Sobald man das getan hat, kann man den rot-markierten Eintrag mit „Remove“ löschen.


An dieser Stelle muss das zu startende MIDlet angepasst werden

Java Micro Edition – Grafiken einbinden

Um mit J2ME Grafiken im eigenen MIDlet einbinden zu können, muss zuerst ein Image-Objekt erzeugt werden, welches dann einem ImageItem zugeordnet wird. Dieses ImageItem wird dann dem anzuzeigendem Form hinzugefügt.

Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private Image image;
private ImageItem imageItem;
private Form form = new Form("Titelleiste");
 
try
{
	image = Image.createImage("/texture.png");
}
catch (Exception e)
{
	// Fehlerbehandlung
}
 
imageItem = new ImageItem("Label", image, ImageItem.LAYOUT_DEFAULT, "Image not found");
form.append(imageItem);

Hinweis: Damit der relative Pfad „/“ benutzt werden kann, muss das anzuzeigende Bild im „“ im Java SE Platform SDK 3.0 abgelegt werden. Das gilt auch, wenn das Bild von einer Klasse aufgerufen wird, die sich in einem darunter liegendem Package befindet (siehe Bild).