Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

Java pro Palmy a PocketPC: SuperWaba

26.4.2002, Zdeněk Michálek, článek
Java pro Palmy a PocketPC: SuperWaba
Jak se programuje takové javovská aplikace na Palmovi ? A co rychlost - na PocketPC to jde, procesor si jede na svých >200MHz; jak je tomu ale u Palma ? Není Java provozovaná na Palmu k uzoufání pomalá ?
Ne, nejedná se o recenzi; bez nucení přiznávám, že nejsem právě javovský guru - tuhle pozici rád přenechávám kolegům, kteří - jak budou mít chvíli - o javovském programování na Palmu a PocketPC určitě něco napíší. V tomto okamžiku mě prostě jen zaujalo oznámení o nové verzi SuperWaba - javovského runtime pro Palmy a PocketPC - který je optimalizován na použití v mobilních zařízeních.

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.
Palm screen shot.


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: