Java pro Palmy a PocketPC: SuperWaba
Bližší informace o SuperWaba jsou k mání na domácí stránce, z níž je možné po zaregistrování zdarma vše stáhnout. Základní vlastnosti:
- jednoduché programování, dostatečná robustnost
- spustitelné na PalmOS a WindowsCE
- Open-Source (LGPL)
- podporována jsou monochromatická i barevná PDA
- náhled appletů v JDK
Runtime pro Palma má celkovou délku 236kByte - pro mého starého jednomegového Palma III to není právě málo, nějak se s tím ale dá smířit. Javovské aplikace jsou po zkompilování nainstalovány jako běžné .prc a .pdb soubory, jsou viditelné "na ploše" v běžném launcheru a nijak na první pohled nepoznáte, že se jedná o ne-nativní aplikace.
Po ťuknutí stylusem na ikonku jediný rozdíl shledáte v tom, že se na obrazovce objeví přesýpací hodiny - natahování a spouštění programu trvá přece jen o trošku déle (cca 80kB program - Finance - se natahuje zhruba 3 sekundy). Tím ale rozdíly končí, aplikace "jedou" kupodivu docela svižně.
Zároveň se SuperWabou se dodává několik free aplikací - vcelku použitelný finanční manažer, jednoduchý kreslicí program, několik her (nechybí Sokoban známý z počátků PC XT), většinou včetně zdrojových kódů.
Jediné, za co se platí, je případný support (ať už mailový nebo telefonický). Je možné si koupit i tutoriály.
Krátký příklad javovského programování pro Palma - naprogramování vstupní obrazovky pro vyhledávání:
Většina tříd grafického interface je v balíku waba.ui. Hierarchie tříd je podobná javovskému AWT, všechny rozšiřují java.lang.Object a waba.ui.Control.
import waba.ui.*;
public class ContactManager extends MainWindow
{
Edit edit;
Label label;
Button button;
public ContactManager()
{
setTitle("Contact Manager");
setBorderStyle(Window.RECT_BORDER);
label = new Label("Enter name to search for:");
label.setRect(5, 65, 110, 15);
add(label);
Edit edit = new Edit();
edit.setRect(55, 80, 60, 15);
add(edit);
button = new Button("Find");
button.setRect(65, 110, 30, 15);
add(button);
}
public void onEvent(Event event)
{
if (event.type == ControlEvent.PRESSED)
{
if (event.target == button)
{
// lookup contact in Catalog...
}
}
}
}
První se naimportuje balík waba.ui (všechny třídy uživatelského rozhraní jsou v něm). Tato třída rozšiřuje MainWindow (každá Waba applikace, která má nějaké uživatelské rozhraní, rozšiřuje MainWindow). Dále deklarujeme proměnné Edit, Label a Button. V konstruktoru voláme setTitle a setBorder, které inicializují GUI komponentu. Všiměnte si, že používáme absolutní umísťování objektů (na rozdíl od Javy). Neexistuje žádný koncept layout manageru - prostě jen předáme x a y souřadnici s výškou a šířkou objektu a objekt je umístěn na obrazovku.
Konečně k obsluze události v onEvent metodě: objekt události nejdříve zjistí typ události - v tomto případě potřebujeme zjistit, jedná li se o událost typu PRESSED (dalšími událostmi může být FOCUS_IN, FOCUS_OUT, TIMER a WINDOW_CLOSED). Všechny typy událostí jsou definovány v třídě ControlEvent.
Kompilací vytvoříme .prc soubor, který je vykonatelný pod PalmOS. K tomu potřebujeme dva programy, které jsou součástí SDK Waba, který si stáhnete - warp a exegen. Oba jsou v adresáři bin.
Utilita warp vytvoří WRP soubor a PDB soubor (WRP soubor je určen pro PocketPC platformu). Warp vygeneruje defaultní creatorID pro PDB soubor, to ale může při kompilaci být změněno pomocí přepínače /c. Creator ID je čtyřbytový identifikátor, umožňující PalmOS přiřadit k sobě program a jeho data a můžete si jej zaregistrovat na PalmOS webu.
Následujícím příkazem tedy vytvoříte z naší třídy ContactManager pdb soubor:
warp c /c cnTc ContactManager *.class
První "c" říká Warpu, aby vytvořil PDB soubor, "1" vylistuje obsah PDB souboru, "/c" nastaví CreatorID na "cnTc". Alespoň jeden znak v CreatorID musí být velké písmeno ! Dalším parametrem je název PDB souboru - v tomto případě ContactManager. Konečně "*.claa" zahrne všechny potřebné třídy - v našem případě třídu jedinou, takže jsme se mohli obejít i bez oné hvězdičky.
Utilita Exegen je dalším nezbytným programem - vytvoří PRC soubor, který poskytne PalmOS vstupní bod pro naši aplikaci:
Exegen [options] exefile main-window-class warpfile [warpfile2...]
Takže pro ContactManager voláme:
Exegen ContactManager ContactManager ContactManager
To udává, že PRCsoubor se má jmenovat ContactManager, naše třída rozšiřující waba.ui.MainWindow se jmenuje ContactManager a konečně warp soubor, který obsahuje soubr tříd se jmenuje rovněž ContactManager. Jak vidíte, je nezbytné spustit utilitu warp ještě před Exegen.
Nyní již máte k dispozici PDB a PRC doubor, který můžete nainstalovat do PalmOS PDA nebo emulátoru a spustit. Běh Waby v emulátoru je poněkud problematický - Waba se nechová zcela korektně, takže emulátor ji občas "vyhodí" (u PDA je většinou vše v pohodě).
Znovu podotýkám - ke spuštění aplikace na Palmu potřebujete soubory superwaba.prc a superwaba.pdb.
A ještě několi linků, z nichž jsem čerpal:
- Java Developers Journal "A Waba-Powered Palm Pilot Robot" by James Caple. More>>
- IBM has discovered the power of Waba in the following article/ tutorial: Building handheld applications with Waba
- Porting Sokoban (SuperWaba) to WabaJump - Learn to port a SuperWaba application to WabaJump
- O'Reilly OnJava.com "Data Persistence with Waba" Article and tutorial
- O'Reilly OnJava.com "Palm Programming with Waba" Article and tutorial