= Java unter [Maemo] Linux =

Java wird offiziell von Nokia oder von Sun nicht unterstützt und ist deshalb auch nicht so einfach zu bekommen. Eine Umgebung aus freien Java-Komponenten ist [JaLiMo|https://wiki.evolvis.org/jalimo/index.php/Maemo]. Man kann es per Install-Datei mit einem Klick installieren. Die SWT-Implementation soll auch ganz gut gehen (wenn auch nicht perfekt integriert).

== Swing-Probleme ==

Leider gibt es noch einige Probleme mit Swing... :-( Es funktioniert leidlich nach Installation des Pakets "classpath-gtk". Zum einen fehlt einiges an Integration in den Maemo-Hildon-Desktop, d.h. die Fenster sind zu gross, man kann sie nicht so einfach schliessen, etc. Was aber wirklich stört, ist die Tatsache, daß die Swing-Texteingabefelder dem System nicht mitteilen, daß sie nun eine Texteingabe haben wollen und deshalb die virtuelle Tastatur nicht aufgeht. Damit ist also jede Texteingabe unmöglich. Nun gibt es einige Möglichkeiten, mit diesem Problem umzugehen:

* Warten, bis Nokia und Sun das Problem lösen (dauert mir zu lange)
* Ein n810 mit Tastatur benutzen und damit leben
* Seine Applikation mit SWT statt Swing implementieren
* Das Problem selber lösen (wie [tarent|http://lists.evolvis.org/pipermail/jalimo-info/2008-February/000063.html] das wohl angefangen hat), was aber C-Kenntnisse und einiges Know-How verlangt. Hilfreich könnte [die Wikiseite zur InputMethod|http://maemo.org/community/wiki/inputmethod/] und der Absatz [Coding for the Input Method|http://maemo.org/community/wiki/howtoinputmethod770/#3b497ab3dfdde4ecf362ad66af3ffa8c] sowie die dort verlinkten Snippets sein.
* [SwingWT|http://swingwt.sourceforge.net/] benutzen: Eine Swing-Implementation, die unter SWT läuft. - Ich habe hiermit experimentiert und ein Netbeans-generiertes Datenbank-Programm umgesetzt; die Qualität ist erstaunlich gut. Dennoch werden z.B. einige Events nicht generiert. Außerdem stellt sich die Frage, wie gut dieses Projekt mit der weiteren Java-Entwicklung mithält. Ein Großteil meiner Anpassungen war wegen Methoden, die in Java6 neu waren.
* Ein eigenes Tastatur-Widget in Java programmieren. (Ergibt nicht das originale Look & Feel, ist aber plattformunabhängig)
* AWT-Widgets einbauen (Peters Idee). Diese sollten in Maemo auf GTK basieren. ([AWT-Tutorial|http://java.sun.com/developer/onlineTraining/awt/contents.html]). Ich habe es probiert und AWT funktioniert grundsätzlich unter Maemo. :-)



== Anpassung einer Netbeans-generierten Datenbank ==

Ich habe auf Wunsch von Franz Lischka versucht, ein mit dem Netbeans-Wizard generiertes Desktop-Datenbank Programm auf Maemo umzusetzen. Dabei habe ich einige Klippen umschiffen müssen.

Aus irgendeinem Grund funktioniert die toplink JPA-Implamentation nicht in der Jalimo-Umgebung. Ich habe sie durch OpenJPA ersetzt (und dazu ein bisschen was auf der Seite OpenJPA geschrieben).

Beide JPA-Implementationen benötigen einen XML-Parser, der bei GNU Classpath nicht dabei ist, also habe ich Apache Xerces installiert und die beiden Bibliotheken '''xercesImpl.jar''' und '''xml-api.jar''' eingebunden.

Das Swing Application Framework benutzt in ~SingleFrameApplication.initRootPaneContainer die Methode java.awt.Window.isLocationByPlatform(), die erst ab Java5 existiert und eben auch in Classpath nicht drin ist. Ich musste das Framework neu übersetzen und habe den kritischen Aufruf dabei durch try...catch gekapselt.

Einige Anpassungen ergeben sich daraus, daß das von Netbeans bevorzugte ~GroupLayout nicht existiert. Es gibt jedoch (im Netbeans-Platform-Verzeichnis) eine Bibliothek mit einem fast identischen ~LayoutManager. Entweder passt man da einige Kleinigkeiten an (wie ich bisher) oder man schafft es, direkt Quellcode für den richtigen Layoutmanager zu erstellen.

Dann habe ich die vom Generator erstellten ~JTextField Widgets durch ~TextField-Widgets aus dem AWT ersetzt. Damit funktioniert die Texteingabe zwar, aber es fehlen die Events beim Ändern des Textes. Deshalb benutze ich nun eine recht simple, von ~TextField abgeleitete Klasse.

Ergebnis:

[{Image src='JavaUnterMaemo/jalimodb-screenshot.png'}]


=== Fazit ===

Die Applikation läuft, wenn auch ziemlich langssam. Die Startzeit ist sehr lang. Dafür wurden jedoch so gut wie keine Änderungen an der Architektur der Ursprungs-Applikation vorgenommen. Eine speziell geschriebene App, die z.B. auf JPA und ~BeansBinding verzichtet, sollte gut bedienbar sein. Ggf. ist das auch nur für häufig genutzte Programmteile nötig. Man sollte so bei ein bisschen Vorsicht sehr viel Code zwischen einer Desktop- und einer Maemo-Mobil-Applikation teilen können.

Bis Java-Programme "First-Cass-Citizens" auf dem Maemo-Desktop werden, ist es allerdings schon alleine wegen der Startzeiten noch ein Stück Weg. --ThomasBayen


----
[{Tag LUG Projekte PDA Java Netbeans}]