Java a programovaní midletu Úvod P ez p l stoleti se po íta e rozvíjejí a derou se do života každého lov ka. Tento vývoj se s asem ješt více zrychluje. Na po átku velké jak n kolik fotbalových stadion postupn menší a menší a dnes není složit jších elektrického p ístroje, který by v sob m p ístup jen nem l malého p íbuzného tého rostoucí rodiny. Od dob, kdy m ly k po íta privilegovaní a vyvolení uplynulo mnoho asu a s tím jak postupn zmenšovali velikost se zvyšoval jejich po et a m nily se také skupiny lidí, které s nimi pracovali. Už kolem se krom programátor a správc za aly to it lidé, kte í se adili do sálových po íta skupiny tzv. uživatel . Tato skupina im dál víc rostla a im dál víc se snižovala její odbornost. Ž e dnes už uživatele ani neví, kdy a jak pracují s po ita em. Jeden z . Tato myšlenka nez stávala na hlavních krok bylo rozší ení myšlenky osobních po íta dlouho jen teorii. Úkolu se chopilo mnoho firem, mezi které pat ily IBM, Apple a další. Na pozadí vývoje osobních po íta však probíhala i další vlna ší ení a tou bylo a je postupné využívání po íta ových technologii i v ostatních typech elektronickych za ízní. Tím myslím p edevším využívání mikroprocesor ve spot ební elektronice, elektroinstalci automobilu, speciálních zá ízeních jako jsou telefoní ust edny... Tak nám za alo vznikat mnoho pom rn r znorodých za ízení, jejichž ízení byvá v tšinou dáno programem.K takovým nam navíc v poslední dob za ínají p íbývat i takzvaná "mobilní za ízení". Mezi n pat í r zné typy kapesních po íta , palmtop (po íta do dlan ), handheld , diár , a v neposlední ad mobilních telefon s r znými funkcemi, které nemají už s telefonováním mnoho spole ného. Hlavn na poslední podmonžinu je zam en následující text. Jak už jsem nazna il, m eme v uvedeném vý tu vid t dv množiny. První je ta, na které je programování p irozenou záležitostí. A ta druhá je možina zažízení, u které je pro nezkušeného problém p edstavit si b ící program a už v bec program vytvá et. Prost edek, který tyto dv skupiny sjednocuje a vytvá í jednotné prost edí je programovací jazyk Java. S pomocí Javy, m ete vytvá et programy na tém jakýkoliv typ programovatelného hardwaru, který Javu podporuje. A na dalších stránkách bude ukázáno jak toho v praxi dosáhnou na moderních typech mobilních telefon .
Historie Javy O Jav se asto mluví jako o programovacím jazyku 2. poloviny devadesátých let 20.století. Je tomu tak asi proto, protože v této dob zážívají mobilní za ízení opravdový boom. V našich st edoevropských eských podmínkách to m eme vid t, na p íkladu vznikajících a rychle se rozr stajících mobilních sítí. P estože v t chto dobách ješt nejsou dostupná prakticky žádná mobilní za ízení, které by Javu p ímo implemntovali, mluví se ale, že tomu tak jednou bude a java pob í na každe ledni ce, pra ce, televizi, nebo mobilním telefonu. P enositelnost Javových program se tedy dá ukázat jen na ruzných platformách osobních po íta . Vývoj Javy, ale za al o n co d íve. V už prosinci roku 1990 byl sestaven sple ností Sun Microsystems tým, který se m l zabývat . Výsledkem práce toho týmu na tzv. Green mýšlenkou jaká bude další vlna po íta projectu byla první inkarnace Javy, která se p vodn jmenovala Oak(dub). S p vodní myšlenkou, aby Java byla jazyk pro programování hardwarov odlišných za ízení, která se dochovala dodnes, byl vytvo en první prototyp, na kterém java b ela. Byl to Star7(*7), handheld, který m l mnoho hardwarových vymožeností, které ani dnes n ktera obdobná za ízení nemají(dotyková obrazovka, PCMCIA slot, radio networking, flash RAM souborový system,..).
Obr.1:Vzhled a prost edí prvního Java Handheldu Star7 V let roku 1992, po osmnáctim sí ní práci týmu 13 lidí na Green projektu, byla uvedena první demoverze. Green projekt b hem teto doby p erušil všechny oficiální kontakty na Sun Microsystems a stal se nezávislý. Nastal as hledat trh, na kterém by se produkt a vysledky Green projektu ujaly. Projekt byla ale tak revolu ní a nový a všemu ostatnímu nepodobný, že se muselo nejprve nalézt n jaké medium, s kterým bude pracovat. Samoz ejm najperspektivn jší možností se stal Internet, jehož popularita jako media pro ší ení textu, grafiky a videa pomocí HTML, se zv tšovala den co den. Další práce na Jav se tedy zam ily pro spolupráci v prost edí Internetu. Team projektu se zv tšil postupne až na 70 zam stnanc , p est hoval se z anonimních kancela í do reprezentativních prostor a p ejmenoval se na FirstPerson. První implemetnací Javy v prost edí Internetu se stal od roku 1993 klon už hotového webového prohlíže e Mosaic(kodovým ozna ením "WebRunner",podle filmu BladeRunner), pozd ji p ejmenovaný na HotJava. V té dob se o Javu za al op t zajímat Sun. Z po átku týmu poskytl svoje p ipojení na Internet, protože o Javu byl takový zájem, že p vodní p ipojení serveru, ze kterého si uživatele stahovali Javu(v etn zdrojového kódu) bylo pln zatíženo. V roce 1995 ve ejn podpo il Javovou technologii. A v podstat o pár hodin poté navrhla týmu možnost implementace ve vlastním prohlíže i spole nost Netscape.
Sou astné aplikace Javy
Postupn se Java rozší ila a vzniklo mnoho technologii, které se asto skrývají za r znými zkratkami, asto za ínajícími písmenem J. Zde je jen n kolik málo, které jsou d ležité, nebo se zdají býti zajímave ve vztahu k téma tu následujícího textu: JavaApplets - aplikace, které b í jako sou ást webové stránky. Je zde nutná podpora prohlíže e. První takový byl práv HotJava. Je zadarmo, nap . u Netscapu, Opery, nebo MS Internet Exploreru JavaServlets - aplikace, které b í na stran webového serveru. M ou generovat webové stránky, p ipojovat se na databázi. Vytvá et WAP. Je zde nutná podpora webového serveru. V tšinou neni zadarmo a tvo í alternativu k technologiim jako je PHP, ASP, nebo Serverový(serverside) JavaScript. JDK - Vyvojové prost edí pro Javu(Java Development Kit). Obsahuje p edklada do bytekódu, interpreter bytekódu, n kolik dalších utilit, knihovny a p íklady použití. Ozna ovali se tak balí ky prvních verzí Javových nástroj , JDK 1.0 , 1.1. JFC - Java Foundation Classes, jde o jednu z mnoha zkratek, které ozna ují jednu z podmnožin stromu javových t íd. Zde jde p edenším o t ídy reprezentující prvky uživatelského rozhraní, jako jsou TextFieldy, Labely, atd.. JavaBeans - Projekt, který definuje základní množinu standardních komponent API pro Javu. Usnad uje vývoj znovupoužitelných komponent a spojování Javy s ostatními technologiemi, jako je MS ActiveX, Netscape LiveConnect... V souvislost s p edchozím se dá íct, že jde o zp sob jak navrhovat komponenty-prvky nap . pro uživatelské rozhraní. J++ - Mutace Javy vytvo ena firmou Microsoft. V podstat Jav akorat uškodila, protože projevovala známky nekompatibility a to zp sobilo programátor m v Jav problémy. Nakonec Microsoft od podpory Javy odstoupil a vytvá í v sou astné dob vlastní platformov nezávislý a univerzální nástroj, DotNet. Tím v podstat jen kopíruje myšlenku Javy. Jde tedy spíš o obchodní strategii, než o n jaký p ínos. Java2 - Nov jší verze Javy ozna ované jako Java2 se d lí do t í kategorii podle
p ínos. Java2 - Nov jší verze Javy ozna ované jako Java2 se d lí do t í kategorii podle toho na jaký konkrétní kon jsou úr eny. V íslování verzí JDK jsou to verze 1.3, a výš. J2EE - programování servrových aplikací a databází J2SE - programování konven ních aplikací a applet J2ME - tvorba software pro mobilní bezdrátová za ízení JavaCards - je dopl kem J2ME pro programování aplikací pro hardware s mimimem prost edk jako jsou smart karty se specializovaným prost edím, které kv li svým pam ovým omezením(1.2KB až 32KB nevolatilní EEPROM, nebo flash pam ti), a procesorovým výkonem(8-16 bit na 1-5Mhz), není prvoplánov úr eno k programování. JavaCard API tvo í jen velmi malá, velice opatrn zvolená skupina t íd. Dokonce ani vetší datové typy jako et zce, desetiná ísla, nebo t ídy. Vynechává také mnohé jiné vlastnosti javového prost edí, jako je dynamické nahraváni t íd, nebo multi-thraeding. JavaCard m e být použita nap íklad na SIM kartách do mobilních telefon , k držení informací o u tu telefonu. PersonalJava - z roku 1997, je další pokus Sunu zam ený na produkty spot ební elektroniky s uživaleským rozhraním, p ípadným p ipojením k síti a menšími ové omezení,..), jako jsou handheldy, televize a hardwarovými možnostmi(pam za ízení "webového charakteru". Zahrnuje omezenou množinu(podstrom) Javových t íd a p idává n které své vlastní. Nap íklad rozhraní Truffle pro práci s dotykovou obrazovkou. P estože se m la PersonalJava vyvíjet jako samostatná platforma,v sou astnosti je prakticky totožná s takzvaným "Personal" profilem J2ME. EmbeddedJava - m la umožnit implementovat jen malé kousky Javy na konkrétních za ízeních. Nap íklad jen pár t íd na práci s textem, atd. Byla uvedena v roce 1998, ale Sun ji brzo p estane podporovat, protože nynejší J2ME s volbou profil její funk nost pln nahrazuje. KVM, CVM a Spotless System - tyto pojmy, jsou spojeny s posledním pokusem Sunu z roku 1999, o implementaci zobecn ní Javy pro r zná za ízení. Cílem bylo vytvo it tém kompletní Java Virtual Maschine, s minimálními nároky. Toto se následn p em nilo v ásti J2ME. MIDlets - typ Javové aplikace. Jedna z možností jak programovat plnohodnotné aplikace na mobilní za ízení. Populární jsou dnes toho typu JavaHry na mobilní telefony. V následujícím textu si ukážeme jak se MIDlety programují. JVM - Java je ve své podstat interpretováným jazykem. Interpreter si asto m eme p edstavit, jako "simulovaný po íta na po íta i", s vlastní instruk ní sadou, datovou organizaci,... Z toho je také název pro interpreter Javy ; Java Virtuál Machine. JVM se chvá jako celkem inteligentní stroj, jehož smyslem je usnadnit programování a umožnit p enositelnost. D ležite je ješt podotknout, že Java není interpretováná p ímo ze zdrojového kódu, ale z mezikódu, ozna ovaného jako bytekód, který se získá kompilací(p ekladem) ze zdrojáku. Nep íjemným d sledkem tohoto postupu je, že výsledný b h programu je mnohokrát pomalejší, než srovnatelný program napsaný a p eložený do nativního strojového kódu. JIT - neboli Just-in-time, je pokus o vy ešení p edchozího problému. Jde o to, že se zdrojový kód v Jav místo do bytekódu p eloží, pomocí tzv. Just-In-Time kompileru, do nativního zdrojového kódu po íta e a pak b í stejn rychle, jako ostatní programy. Nap íklad webové servery, které zasílají applety, klient m je mohou nejprve p eložit, tak aby odpovídaly konfiguraci klienta. ...
Architektura Javy Java je pom rn nový programovací jazyk, v porovnání nap íklad s C/C++,nebo Pascalem/Object Pascalem, které se v sou astné dob hodn v praxi používají. M la proto tu možnost u it se ze zkušeností generací programátor s nedostatky starších programovacích jazyk . V následujícím bude uvedeno stru n odpov na otázku: "Co je Java z hlediska programátora?" Java je jednoduchý programovací jazyk. Jednoduchý v takovém smyslu, že programátor, který prošel školou C ka, nebo C++, p ípadn má zkušenost s jiným programovacím jazykem, který má syntaxí blýzko C ku, jako je PHP, nebo JavaScript, nemá problém se
který prošel školou C ka, nebo C++, p ípadn má zkušenost s jiným programovacím jazykem, který má syntaxí blýzko C ku, jako je PHP, nebo JavaScript, nemá problém se jeho zakladní konstrukce nau it. A jednoduchý, protože obsahuje pom rn menší množinu konstrukcí než obrovité C ko/C++. Ve zkratce e eno, Java je C++ okrájené o mnoho zbyte ných aspekt a konstrukcí, které byly asto náchylné k programátorským chybám a obohacené o nové, které v C++ chyb ly, nebo se neobratn formulovaly. Podstatným rysem Javy je, že na rozdíl od C/C++ nepoužívá ukazatele. Ty jsou p i programování v C/C++ vždy zdrojem mnoha chyb. Java práci s ukazateli, která je nezbytná, nap íklad p i dynamické alokaci pam ti skrývá. Ale je nutné o tomto p ístupu v d t nap íklad p i p edávaní parametru, kdy n které parametry p edáva odkazem(referenci), a n které hodnotou(hlavn základní neobjektové nestrukturovane datové typy). A pro práci s pam tí používá garbage collector, který dokáže odstra ovat kusy pam ti na které už neexistuje žádná reference. Dále java ostra uje nap íklad struktury a unie, p íkaz goto, p et ování operátor , nebo mnohovásobnou d di nost. P ez svoji jednoduchost, má Java silné vyjad ovací možnosti a navíc programátorovi práci usnad uje.
Java je objektov orientovaný. Java p ebírá mnoho objektových konstrukcí z C++, ale u í se také od SmallTalku, nebo Simuly. Více mén to znamená, že v Jav je všechno objekt, mající data a implementující operace jako metody nad nimy. I základní datové typy mají svoje objektové obálky. Java je distribuovaná. Toto je zájímavá vlastnost, která, jak bylo výše popsáno, vyplývá z toho, že byla navržena pro práci na sí i. V praxi to znamná, že je možné ásti programu stahovat z nap . Internetu jako odd lené kusy. Nejen k tomuto ú elu perfektn slouží globální strom balík t íd, který se zárove m e chápat jako sí ová adresa. Interpreter pak se pak snaží n kolika zp soby najít a nahrát hledaný kus, který m e být bu lokální nebo i vzdálený.
O Jav se asto mluví jako o robusním programovacím jazyku. Znamená to, že je ur ena k tvorb vysoce spolehlivého softwaru. K tomu p ispívá jak odstín ní práce s pam tí, tak ošet ování tzv. vyjímek, které jsou také z p evzaty z C++. Zbytek vlastností uvedu jen vý tem, protože vyplývají z toho co už bylo e eno. Java je interpretovaná, bezpe ná(jistá urove bezpe í), výkonná(p i použití JIT), p enosná a nezávislá na architektu e.
Globální strom t íd Javové programy nežijí na rozdíl od C ka v prázdném jmeném prostoru. Na pozadí, existuje jakýsi hierarchicky uspo ádaný strom balík , podbalík a t íd. V tomto stromu je zakuklena všechna funk nost Javy. Velikost stromu a tím množství t íd se r zní podle toho, jakou edici Javy používáte, respektive jaké má Vaše runtimové prost edí(interpreter) dostupné knihovny. K jednotlivým t ídám pak p istunujete pomocí te kové notace.
Obr.2:Ukázka hierarchického stromu balík v Jav
P íklady progrování v Jav
Zde následuje krátký kód v jazyce Java. Na první pohled vypadá strukturou pom rn odlišn . Je to tak proto, že Java se snaží být kompletn objektová. Každý sebemenší program je ve ejná t ída, stejného jména jako zdrojový soubor. Vstupní bod programu je verejná statická metoda main, s parametrem typu pole et zc . Je videt, že tato metoda je ekvivalentem hlavní procedury z C/C++. Je pouze obalena t ídou. import java.lang.*; public class AhojSvete { //konstanty final static String NOARGV = "Nejsou žádné vstupní parametry."; final static String HELLO = "Ahoj Sv te!"; //toto je hlavní metoda public static void main(String argv[]) { //java.lang.System.out je staticky clen //tridy System reprezentujici standardni vystup System.out.println( HELLO ); //ukaž vstupní parametry for(int i = 0;i < argv.length ;i++) System.out.println(argv[i]);
if(argv.length==0) //plne kvalifikovane jmeno java.lang.System.out.println( NOARGV ); } }
Zdroj 1: Konzolový program AhojJava.java Dalším zajímavým pozorováním je první ádek s klí ovým slovem import. Je nutné p ipomenout, že Java nep ipojuje žídné knihovny. Nepot ebuje je. V jmeném prostoru každého programu je celá hierarchie balik a t íd, kterou ma run-time Javy k dispozici. První átek slouží pouze jako zkratka. íká, že všechna jména s p edponou java.lang se mužou používat bez této p edpony. Vysv tlení p esného významu klí ových slov final, static, nebo public p esahuje tento text a je lepší se obrátit na n jakou p íru ku k syntaxi Javy(viz reference)
Co tento zdrojový kód má d lat je myslím z ejmé. Má výpsat na standardní vstup hlášku následkovanou seznamem vstupních parametr , nebo ohlášením, že žádné nejsou. Co ale dál? Jak program spustit? Nejprve bude pot eba mít nainstalován vývojový balí ek J2SDK firmy Sun, nebo n který jiný konkuren ní p eklada . Druhá možnost v tšinou znamená obrátit se na produkty jiných, které v tšinou obsahují kompletní vývojové prost edí(IDE) s vestav ným debugerem, integrovanou nápov dou a editorem kódu, který zvýraz uje syntaxi. Takový to nástroj v tšinou není zadarmo. Jde v tšinou o produkty firmy Borland, Microsoft, ... První možnost je mnohem lepší, protože tak dostanete vše nezbytné, v etn p eklada e a interpreteru Javy, která spl uje nejp esn ji všechny nejnov jší normy a specifikace. A navíc úpln zadarmo. Stahnout J2SDK na www stránkach http://java.sun.com/downloads
Z tohoto balí ku pro nás bude dále d ležitý p eklada javac a interpreter java. Náš zdrojak s nimy p eložíme a spustíme pomocí p íkaz : javac AhojSvete.java java AhojSvete
Dostaneme nejspíš hlášku podobou této:
java AhojSvete
Dostaneme nejspíš hlášku podobou této: Ahoj Sv te! Nejsou žádné vstupní parametry.
Pokud bychom spoušt li program s parametry dostali bychom: java AhojSvete 1 2 3 Ahoj Sv te! 1 2 3
Takže je vid t, že konzolové aplikace se dají v Jav psat upln normáln , jak jsme na to zviklí z C ka. Další druhy aplikací, jako jsou applety, nebo klasické "okení" aplikace, p ípadn MIDlety(ale k tomu se dostaneme), se vytvá ejí jednoduše, ale malinko odlišn , než jsme na to zvyklí z C ka. V tšinou se za ne tak, že se vytvo í t ída, jako potomek n jaké t ídy, jejiž vlastnosti chci aby moje vlastní m la. To znamená, že když chci okno, zd dím svoji t ídu po t íd java.awt.Frame. V hlavním metod main pak vytvo íme instanci této t ídy, ímž se nám otev e okno. V tšinou je ale nutné, p edefinovat n které abstraktní metody, nebo provest n jakou nezbytnou inicializaci. import java.awt.*; import java.lang.*; public class WindowApp extends Frame { public static void main(String argv[]) { window_app w=new window_app(); w.show(); } }
Zdroj 2: Okení aplikace WindowApp.java Další odlišný p ístup je v p ípad applet . Zde není žádná metoda main. Je zde však možné p epsat metody init, start, stop, destroy, p ípadn paint a ovlivnit tak životní cyklus appletu. Applety navíc nejsou interpretovány standardním java interpreterm, ale místo toho jsou spoušt ny v internetovém prohlíže i, nebo appletviewerem, který je sou ástí J2SDK. import import import import
java.applet.*; java.lang.*; java.awt.*; java.awt.event.*;
public class AppletTest extends Applet implements ActionListener { boolean capt_visible=false; //tato trida odposlouchava udalosti tlacitka //tato metoda je volana jako reakce na ne public void actionPerformed(ActionEvent e) { capt_visible=true; repaint(); } //odpovida vpodstate main public void init() { //vložení tlacitka Button b = new Button("Pozdrav!"); b.addActionListener(this); //zvlastní zpusob umistovani komponent definovany tzv layoutem add( b , BorderLayout.SOUTH); } //metoda, ktera prekresluje applet, kdyz je to potreba public void paint(Graphics gr) { if(capt_visible) gr.drawString("AHOJ SV TE",20,50); }
if(capt_visible) gr.drawString("AHOJ SV TE",20,50); } }
Zdroj 3: Applet aplikace AppletTest.java Každý applet se musí spoušt t z HTML stránky. Bu jejím na tením do webového prohlíže e, nebo p edáním souboru HTML appletviewru. Podoba HTML stránky, která se odkazuje na náš p eložený applet je následující: >
Zdroj 4: Applet vložený do HTML stránky AppletTest.html
Java 2 Micro Edition Dá se ici, že Java postupn s v tšími i menšími problémy, mezi které pat í nap . rychlost, plní, krom jiného, u el se kterým byla navržena. D kazem toho je Java2 MicroEdition, která se vedle javových desktopových aplikací, internetových applet a servlet vrací k rozsáhle množin mobilních za ízení, takových jako byl na po átku Star7. V rámci m eme vytvá et aplikace pro mobilní telefony, PDA, palmtomy, handheldy, nebo set-top boxy(televize, na které se dá prohlížet Internet). J2ME nijak nem ní programování v Jav . Nep idává nové konstrukce, nové typy, ani nem ní syntax. To znamená, že programujete upln stejn , jako to bylo možné u appletu, nebo aplikaci s uživatelským rozhraním. Jediný velký rozdíl je, že nem ete používat n které standardní balíky Javy. P esto J2ME není pouhou podmnožinou J2SE. Definuje totiž n které vlastní balíky t íd, které se dají na n kterých za ízeních použít nap íklad pro výstup, nebo vstup. Dále je nutné p ipomenout, že J2ME nerozši uje p edchozí Javové technologie, pro programovaní elektronických za ízení jako byly Personál Java a Embdedded Java. Ty byly založeny na JDK v1.1. A s J2ME nemají nic spole ného. Tyto technologie, p estávají být podporovány, protože je J2ME ve v tšin p ípad pln nahradí. Sou ástí J2ME není ani JavaCards. Ta tvo í jakýsi dopln k. Je tomu tak, protože není možné implementovat minimální základ J2ME na za ízeních pro které je JavaCards vytvo ena. Dokážete si jist p edstavit, že mít jednu univerzální množinu balíku na všech za ízeních je zbyte né, když na n kterých nem e být nikdy použito, nap íklad kv li pam ovým omezením, omezenou velikostí a možnostmi displaye, nebo jeho uplnou absenci, p ípadn , absencí zvukového výstupu, atd. Proto je J2ME ješt dále drobn ji rozd leno. A pro všechny za ízení je povinná jen malá ást, na které je závisly samotný jazyk, jako jsou objektové obaly datových typ , nebo matematické funkce, atd. J2ME definuje konfigurace a profily, které jednozna n ur ují runtimem podorováné t ídy. Na Obrazku 3 je videt, jak konfigurace a profily definuji dostupné Java API(t ídy).
Obr.3: Organizace API J2ME
Konfigurace
Konfigurace Konfigurace(configuration) ur uje základní J2ME runtimové prost edí. To zahrnuje jak VM tak podmnožinu t íd z J2SE. Každá konfigurace je ur ena pro širší rodinu za ízení podle jejich spole ných vlastností a schopností. V sou astnosti existují dv hlavní konfigurace: Connected, Limited Device Configuration (CLDC) Connected Device Configuration (CDC) CLDC Tato konfigurace je zam ena na low-endové, zdrojema hodn omezené za ízení s omezenou možností p ipojení. V sou asné dob je ve verzi CLDC v1.1. Srdcem runtimu t chto za ízejí je v tšinou K Virtual Machine s velmi malou podmnožinou t íd z J2SE. K VM je nejmenší VM, který se dá srovnávat svými možnostmi se standardním VM z J2SE, p itom se vejde pouze do desítek kilobytu. Konkrétní cílová za ízení pro tuto platformu jsou p edevším p ístroje osazené 16 a 32 bitovými procesory s minimáln 160kb persistentní pam ti a alespo 32kb nepersistentní(dohromady 192kb). Tyto p ístroje by meli mít n jaký typ sí ového p ipojení. Ideální p íkladem jsou mobilní telefony, obousm rn kominikující pagery a PDA ka nižší t ídy. Tyto za ízení jsou ješt v tšinou omezena výpo etní silou, provozní dobou, kterou omezuje výdrž baterii, kapacitou sí ového p ipojení. To vše p ímo omezuje typ aplikací, které se pro tyto za ízení dají vytvá et. Pro tuto konfiguraci se navíc definuje i balík, který není v J2SE a který má nahrazovat n které t kotonážní t ídy z J2SE pro vstup a výstup. Je to balík javax.microedition.io. Tento balík je sou ástí takzvaného GCF(Generic Network Framefork). GFC je odleh enou verzí balík java.net a java.io, pro systémy s nedostatkém pam ti.
java.io
Podmnožina standardních java.io pro práci vstupními a vstupními proudy.
java.lang
Podmnožina standardních t íd jádra jazyka Java
java.lang.ref(CLDC v1.1)
Podpora slabých referencí
java.util
Podmnožina dopl kových t íd(nap . generator pseudonahodných ísel)
javax.microedition.io
Podpora sí ování založena na GCF
Tabulka 1: Balíky CLDC CDC Konfigurace "Connected Device Configuration" je ur ena pro za ízení, která nejsou tolik omezena jako ta, která podporují pouze CLCD. P íkladem t chto jsou mobilní telefony výšší t ídy, PDA ka, set-top boxy, naviga ní systémy luxusních automobil a jiná webov orientovaná za ízení. Tyto p ístroje by m li být osazeny 32-bitovými procesory, minimáln 2 MB pam ti s možností p ipojení do sít . CDC je nadmnožinou CLDC. Obsahuje všechny balíky jako CLDC a p idává další standardní balíky ze J2SE. To podstan rozši uje možnosti pro zkušené programátory v Jav .
Obr.4: Vztah CDC a CLDC Následující tabulka ukazuje balíky, které p ibyli v CDC:
Následující tabulka ukazuje balíky, které p ibyli v CDC: java.lang.reflect
T ídy pro identifikaci a obecnou manipulaci s Javovými t ídami
java.math
Matematické funkce
java.net
Práce se sí ovým rozhraním
java.security
Podpora bezpe nostiních protokol
java.security.cert Bezpe nostní cerfifikáty java.text
Práce s textem, et zci a jejich formátování
java.util.jar
Manipulace s JAR archívy
java.util.zip
Manipulace se ZIP archívy Tabulka 2: Rozši ující balíky CDC
Profily Profily rozši ují konfiguraci a p ídávají k balík m definovaných konfigurací nové t ídy. Jinými slovy e eno, profily nabízí nové t ídy ke specifickému požití na konkrétn jších množinách za ízení, které chyb ly v zakladní konfiguraci. Nap íklad t ídy, které se starají o životní cyklus aplikací, zaji ují uživatelské rozhraní, sí ové spojení, nebo specifické funkce hardwaru. Profily pro za ízení s konfigurací CLDC v sou astnosti jsou: Mobile Information Device Profile (MIDP versions 1.0 and 2.0) Personal Digital Assistant Profile (PDAP) Pro za ízení založené na konfiguraci CDC existují nasledující profily: Foundation Profile (FP) Personal Basis Profile (PBP) Personal Profile (PP) Profily se mouhou pro jedno za ízení slou it. Nap íklad PDAP je jakousi rozší enou nadmnožinou MIDP. A FP je zakladnou pro profily PBP a PP. Profily konfigurace CLDC Tyto profily jsou zam eny na velmi hardwarov omezená za ízení jako jsou PDA ka. Protože samotné CLDC nenabízení žádnou možnost budovat uživatelské rozhraní, je tato funk nost p enesena až na urove t chto profil . Vztah MIDP a PDAP je stejný jako CLDC a CDC. MIDP je podmnožinou PDAP, jak ukazuje následující obrázek.
Obr.5: Vztah profil konfigurace CLDC MIDP V nedávné historii byla exisotval pouze jeden profil. Byl to práv profil MIDP verze 1.0.
V nedávné historii byla exisotval pouze jeden profil. Byl to práv profil MIDP verze 1.0. Tato zkratka byla v podstat synonymem pro celou J2ME. Ale velice rychle díky struktu e návrhu vznikly další profily a konfigurace. A je jisté, že v budoucnosti jich ješt mnoho vznikne, respektive bude standardizováno. MIDP je momentáln podporován p edními výrobci mobilních za ízení, jako jsou: Motorola, Nokia, Ericsson, RIM, SprintPCS, Nextel a NTT DoCoMo. Za ízení, které spl uje minimální požadavky specifikace MIDP 2.0, musí spl ovat nasledující parametry:
Display: velikost 96x54 pixel , jednobitová hloubka, pom r výšky a ší ky p ibližn 1:1 Vstup: jeden nebo vice z: jednou/ob ma rukama ovladaná klavesnice, nebo dotyková obrazovka Pam : 256Kb persistentní pam ti pro MIDP, mimo to co je požadováno CLDC, 8Kb persistentní pam ti pro aplika ní data a 128Kb nepersistentní pro Javový runtime. Sí ové p ipojení: ur it obousm rné Eneretický požadavek: po ítá se s omezeným p íkonem z baterii MIDP bylo p vodn navrženo firmou Motorola, z jejiž návrh posléze vyšla specifikace MIDP 1.0 a z ní po n jaké dob MIDP 2.0. Podstatá funk nost, kterou MIDP p idává ke konfiguraci, je uživatelké rozhraní, podpora životního cyklu aplikace a podpora persistentního ukládání dat. Následující tabulka ukazuje které balíky p idává tento profil. javax.microedition.lcdui
T ídy uživatelkého rozhraní
javax.microedition.lcdui.game
T ídy k programování her, p idány v MIDP 2.0
javax.microedition.media
T ídy pro práci s multimédii, nové v MIDP 2.0
javax.microedition.media.control Ovládání zvuku,.. javax.microedition.midlet
T ída Midlet, implementující životní cyklus aplikace
javax.microedition.pki
T ídy pracující s ve ejnými šofrovacími klí i pro zabespe ení spojení, p idáno v MIDP 2.0
javax.microedition.rms
T ídy pro persistentní ukládání dat Tabulka 3: Balíky p idané profilem MIDP
PDAP Profil PDAP rozši uje konfiguraci CLDC verze 1.1. A klade na hardwarové vybavení no n co v tší nároky, než MIDP: Display: velikost 128x128 pixel , s minimáln jednobitová hloubka Vstup: n jaké bodov orientovan za ízení(nap . pero), není p ímo povinné zajistit vstupy XY sou adnic, ale n jaké pozi ní ovladání(naviga ní klávesy) je nezbytné, n jaká metoda pro vstup znak . Pam : 1000Kb pam ti pro Javový runtime a knihovny. Sí ové p ipojení: ur it obousm rné Eneretický požadavek: po ítá se s omezeným p íkonem z baterii PDAP rozši uje MIDP o dalších pár balík , které dále rozši ují možnosti progrmování uživatelského rozhraní, práci se soubory, vystupními porty a navíc API pro manipulavání s applikacemi, které nejsou p ímo sou ástí Javové nadstavy, jako jsou kalendá e, adresá e, diá e a jiné sou ástí správy osobních informaci(PIM). java.awt
Podmnožina t íd z java.awt balíku ze J2SE na programování konfrotn jšího uživatelského rozhraní
java.awt.event
Události pro awt
java.awt.image
Práce s bitmapami
java.io
P idáva hlavn t ídu pro výstup na tiskárnu.
java.lang.reflect
Nové t ídy, na kterých jsou jiné závislé.
java.lang.reflect
Nové t ídy, na kterých jsou jiné závislé.
java.net
Rozší ení o t ídu URL
java.util
P ibyli nov t ídy Event a Locale
javax.microedition.io
Nové t ídy pro práci se soubory a porty
javax.microedition.pim Manipulace s PIM Tabulka 4: Balíky p idané profilem PDAP Profily založené na konfiguraci CDC Konfigurace CDC je mnohmem bohatší než CLDC a je zam ena na handheldy vyšší ídy a na p ístroje s v tším množstvím pam ti(alespo 2MB) a siln jším procesorem(32-bitový). Množna balíku t id definovaná konfigurací CDC poskytuje jen pom rn nízkoúrov ový p ístup k obecným prost edk m a mýšlenka profil je zde sm ována stejným zp sobem jako u CLDC. Tzn. profil definuje API k hardwarov specifické rodin za ízení. Navíc zde platí u zmín ných t ech profil stejná množinová závislos, jako u MIDP a PDAP. Nejníž je Foundation Profile, jej rozši uje Personal Basis Profile a ten ješt víc Personal Profile. Názorný obrázek neuškodí:
Obr.6: Vztah profil CDC Profil FP P ídává pom rn velkou ást t íd z J2SE, nap podporu šifrování, sí ových protokol , atd. Ale je ur en pro p ístroje, které nemají žádné výstupní za ízení. Z toho d vodu nep idává balíky objekt pro práci s uživatelským rozhraním. Nové balíky jen vý tem: java.io, java.lang, java.lang.ref, java.lang.reflect, java.math, java.net, java.security.*, java.text, java.util, java.util.jar, java.util.zip, javax.microedition.io
Profil PBP Personal Basis Profile, který už je úr en pro za ízení s výstupem, rozši uje FP hlavn o prvky uživatelského rozhraní(AWT), ale také o podporu JavaBeans a nového typu aplika ního modelu Xlet. Nové balí ky: java.awt.*(ale jen n které), java.beans,
java.rmi, javax.microedition.xlet
Profil PP PP profil p idává už jen t í prvký uživatelského rozhraní a navíc balí ek pro spoušt ní applet . Balíky: java.applet, java.awt
Volitelné balíky Poslení zajímavou ástní ve vý tu standard J2ME jsou volitelné balíky, které p idávají nap íklad speciální API pro ovládání specifického hardware: The Java APIs for Bluetooth - je, jak název napovídá množina t íd pro práci s bezdratovou technologii Bluetooth. Jeho sou ástí je balík javax.bluetooth p ímo pro programování Bluetooth a navíc balík javax.obex pro práci s rozhraním IrDA. The Wireless Messaging API - p idává balík javax.wireless.messaging pro
bezdratovou technologii Bluetooth. Jeho sou ástí je balík javax.bluetooth p ímo pro programování Bluetooth a navíc balík javax.obex pro práci s rozhraním IrDA. The Wireless Messaging API - p idává balík javax.wireless.messaging pro zpracování textových nebo binárních zpráv, typicky SMS. Toto API se m e p idat ke každé konfiguraci. The Mobile Media API - p idáva balík s API pro zpracování multimédii. Jeho sou ástí jsou t ídy p ehrava , ovlada a protokol pro práci se zhruba dvanácti typy médii (MIDIControl, VideoControl, ToneControl,..). Za ízení p itom nemusí podporovat všechny. Sta í alespo jeden. Balíky javax.microedition.media,
javax.microedition.media.control, javax.microedition.protocol
The RMI Optional Package - je množina balíku pro RMI(Remote Method Invocation), což je protokol pro vzdálené spoušt ní VM. The JDBC Optional Package for Foundation Profile - je balík, který umo p istupovat a pracovat s SQL databázemi.
uje
Záv rem
P edchozí popis standard , m l nastínit problematiku klasifikace mobilních za ízení. Typicky budou na trhu za ízení, které budou podporovat jednu t ípísmenou zkratku a druhou ne, nebo budou podporovat vše, ale neco v nižší verzi. Programátorovi mobilních za ízení to napoví, jak mocné aplikace na tom, i kterém za ízení m e spust. Nap íklad jestli se m e z mobilního telefonu Nokia XXXX p ímo p ipojit na SQL databázi,atd. Architektura a návrh J2ME je navržene tak, aby postupem asu vznikaly profily a konfigurace pro r zené typy mobilních za ízení. Dá se p edpokládat, že Java se stane jednou z hlavních prost edk pro programování rostoucího po tu mobilních technologii.
MIDlety V poslední dob se staly celkem dostupné mobilní telefony podporující Javu. Slovo "Java" se dostalo v okamžiku do podv domí široké neprogramátorské ve ejnosti. Každý musí mít mobil s Javou, abý mohl hrát, hromady v Jav naprogramovaných her, které mu operátorza nemalý peníz pošle na jeho mobil. Ale není se emu divit, Java bývala od svého oficiálního uvedení spole ností Sun v roce 1995 vždy dobrým zdrojem p íjm pro firmy i pro jednotlivé programátory. Kdo vládl Jav m l se vždycky líp, p estože Java o n co jednodušší než takové C++. Jestli tento trend bude pokra ovat, tak bude znalost psaní aplikací pro mobilní p ístroje velkou výhodou. Programování v J2ME je velice jednoduché, nejen kv li programovaní Jav , ale kv li pom rn okrájenemu API. Nemusíte tak um t mnoho a na mobil dokážete naprogramovat všechno. Z p edchozí teorie víme, že vytvá ení aplikací pro za ízení jako jsou mobilní telefony je prace nad konfigurací CLCD a nad jejím profilem MIDP. Podle profilu se takovýmto program m íká asto MIDLety. Krom toho se tak adí mezi speciální Javové aplikace jako jsou Applety, nebo Servlety. Z p edchozího textu máme p ibližnou p edstavu jak vyvýjet aplikace v Jav . Jak je tomu tedy u MIDlet . Proces vývoje se celkem v mnohém podobá vývoji applet , p esto jsou tu d ležité rozdíly. Vývoj MIDletové aplikace probíhá v tšinou v následujících krocích: 1. 2. 3. 4. 5. 6.
Nápad, motivace k vytvo ení MIDletové aplikace. Psání kódu. Kompilace do bytekódu. Testování v emulátoru. Vytvo ení balí ku JAR a popisova e JAD. Natáhnutí a spušt ní aplikace v mobilním telefonu.
Je vid t, že vývoj aplikace probíhá p evážn mimo za ízení, kde má být na konci použita. Tím vzniká otázka, jaké softwarové prost edky jsou pot eba, krom standardní Javy k vývojí MIDlet , nap íklad na klasickém PC. Jediné co pot ebujete je stáhnout si balík J2ME ze webových stránek spole nosti Sun. Jinou alternativou k tomu jsou r zné komer ní i voln dostpné prost edky a vývojová prost edí. Ale protože nad Javu spravuje p edevším spole nost Sun, jsou její produkty nejrozumn jší volbou. Balí ek j2me_wireless_toolkit existuje jak ve verzích pro opera ní system MS Windows, tak pro Unix/Linux. Obsahem tohoto balíku jsou rozši ující balíky, které nejsou sou ástí J2SE, dále pak emulátor, preverifikátor, profiler, dokumentace k J2ME API, n kolik ukázkových
Unix/Linux. Obsahem tohoto balíku jsou rozši ující balíky, které nejsou sou ástí J2SE, dále pak emulátor, preverifikátor, profiler, dokumentace k J2ME API, n kolik ukázkových aplikací a nakonec visuální nástroj pro správu projekt ktoolbar. Ktoolbar má usnad it a zrychlit vývoj a sestavování aplikací, ale je možné se bez n ho obejít.
Životní cyklus MIDletu Než za neme psat konkrétní kód, je nutné si pov d t n co o tom, jak standardní MIDlet a v jakém prost edí se pohybuje. MIDlet stejn jako applet je velice specifická aplikace. Byl tak pro n j vytvo en speciální aplika ní model. Aplika ní modely jsou v Jav celkem ty i. První jsme si ukázaly hned na za átku. Je to jednoduchý systémem nijak nekontrolovaný, ale hodn používaný v obecném programování. Je ho životní za ne nahráním do pam ti a zavoláním metody main a jeho život skon í opušt ním metody main a ukon ením všech podtread . Charakteristické je, že systém nem l žádnou možnost do n j po spužt ní regulern zasahovat. Aplety uplat ovali jinou filozofii. Protože se nespoušt li jako samostatné aplikace, ale byly závislé na kontextu, do kterého bylý vsazeny. Museli p izp sobit sv j životní cyklus tomu, že je kdykoliv m e n kdo zastavit, nebo uko it. Na takovou situaci m li um t reagovat. Proto jsou u Applet definovány ty i stavy:
loaded - applet je náhrán a je vytvo ena jeho instance, prob hne kód konstruktoru stopped - applet je inicializován, ale zastaven started - applet beží destroyed - aplet je ukon ován T mto ty em stav m odpovídají ty i metody, které mohou být p edefinovány: init(), start(), stop(), destroy(). První se na adu dostává stav loaded a kód konstruktoru.
Potom applet okamžit p ejde do stavu stopped a prob hned kód init(). Tato metoda je se spouští pouze jednou za život appletu. Pak se p esune do stavu started, kdy se zobrazí v okn prohlíže e a je vykonán kód start() Následn m e applet p echázet ze stavu started do stoped, kdy prob hne stop() a nazp t spoušt nim start(). Když je applet kontextem zrušen, nap íklad p echodem na jinou stránku, applet se ocitá ve stavu destroyed a volá se metoda destroy(). T etím aplika ním modelem je práv MIDlet. Existuje ješt jeden, tzv. Xlet, který se používá na mobilních za ízeních vyšší t ídy s podporou Personal Profilu. MIDlet definuje t i d ležité stavy svého životního cyklu: paused - midlet je zkonstruován, ale není spušt n active - midlet je spušt n destroyed - midlet je ukon ován Musíme mít na pam ti, že MIDlet není na mobilním telefonu sám, v tšinou je zde víc program , které se v b hu st ídají a p echázení st ídav ze stavu paused do active. O zavád ní MIDletu se stará AMS(aplication managment software). AMS vytvá í pro MIDlety kontext stejn jako webový prohlíže pro applety. Má tu moc MIDlety ukon ovat, zastavova, nebo mezi nimi p epínat a zvládat situace, kdy v pr b hu MIDletu p ichází nap . telefoní hovor. V tšinou je implementovan jako seznam nainstalovaných MIDlet s malými ikonkami a nápisy. Po zvolení aplikace, je zkonstruována, a spušt na. MIDlet se vytvo í velice podobn jako applet, tzn. d d ním ze t ídy javax.microedition.midlet.MIDlet. Tato t ída zaji uje životní cyklus celého MIDletu. Obsahuje metody, které korespondují se stavy životního cyklu: startApp() - Tato metoda je volána p í p echodu ze stavu paused do stavu active. To m e nastat po tom co je MIDlet inicializován(prob hne konstruktor) a pušt n. Nebo pozd ji, kdy se dostane do stavu paused a je vracen voláním metody resumeRequest(). pauseApp() - Metoda pauseApp se provede pouze pokud zastavení MIDletu evokuje AMS. Poté MIDlet p ejde do stavu paused. MIDlet muže deaktivovat sám sebe pomocí metody notifyPaused(), ale pak se nevyvolá pauseApp. Uvnit pauseApp je vhodné umístit kód, který uvolní tolik systémových prost edk , kolik
sebe pomocí metody notifyPaused(), ale pak se nevyvolá pauseApp. Uvnit pauseApp je vhodné umístit kód, který uvolní tolik systémových prost edk , kolik je možné. MIDlet bude v pam ti ekat na p evedení do stavu active, nebo na ukon ení. V prvním p ípad se bude op t volat metoda startApp(), v druhém metoda destroyApp(). destroyApp(boolean unconditional) - destroyApp se volá, když AMS rozhodne o ukon ení MIDletu. Jestliže se MIDlet rozhodne ukon it sám voláním metody notifyDestroyed(), destroyApp se nevolá. MIDlet m e navíc požadavek AMS na ukon ení odep ít nastavením parametru unconditional na false. To zp sobí vyjímku MIDletStateChangeException. Tyto metody jsou navíc v t íd MIDlet defonovány jako abstraktní, takže je programátor musí ve svém MIDletu p edefinovat. Poslední metodou, kterou jsem nezmínil a souvisí s životem MIDletu je getAppProperty(String key), která dokáže íst vlastnosti a parametrý související s MIDletem. Tyto parametry jsou definovány v takzvaném deskriptoru aplikace a manifestu. O nich se ješt zmíním. import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class BasicMIDlet extends MIDlet { public BasicMIDlet() { } public void startApp() { } public void pauseApp() { } public void destroyApp(boolean unconditional) { } }
Zdroj 5: Základní konstrukce MIDletu
U živatelské rozhraní v MIDP T ídy, které umo ují pracovat s uživatelským rozhraním tvo í asi nejv tší balík v MIDP. Nabízí nám prost edky k definování formulá , práci s bitmapovými obrazky a grafikou. Toto vše m e být zobrazeno na obrazovce(displayi) vašeho mobilního p ístroj. MIDP API definuje jednoduchou hierarchii t íd, které reprezentují zobrazené objekty:
Display Nejd ležit jším t ídou je javax.microedition.lcdui.Display. P edstavuje jakéhosi manažera výstupních i vstupní za ízení. Jestliže pot ebujueme neco zobrazit, pot ebujeme tento objek. Získáme ho voláním statické metody Display.GetDiplay(). Obsahuje metody pro manipulaci se zobrazenými objekty, potomky t ídy Displayable. Metoda SetCurrent nastaví Displayable objekt, který se má zobrazit a metoda GetCurrent naopak vrátí zobrazovaný Displayable objekt. Navíc má Display metody pro zjišt ní hardwarových vlastností displaye. Metodu na isColor(), pro zjišt ní zda je display barevný, a numColors(), která vrádí po et barev, nebo odstín šedi displaye. T ídy Displayable T ída Displayable je p edek pro všechny zobrazitelné t ídy. Zárove implementuje metody zaji ující odchytávání vstupu ze vstupních za ízení(nej asteji klávesnice a s ní svázaná nabídka). Metoda setCommandListener(CommandListener l) registruje, který objekt implementující interface CommandListener, má do své povinn p edefinované metody commandAction(Command c, Displayable d) p ijímat vstupy. Metody addCommand(Command cmd) a removeCommand(Command cmd), pak slouží k p ídávání a odebíraní vstup definovaných objekty t ídy Command. P ímým potomkem t ídy Displayable je t ída Canvas, která se maximáln rozši uje vstupní a výstupní možnosti a proto se asto používá p i programování MIDletových her. Dr hým potomkem je t ída Screen, která je základnou pro formulá ov orientované prvky. Formulá ov orientované prvky d líme na dv . První jsou
která se maximáln rozši uje vstupní a výstupní možnosti a proto se asto používá p i programování MIDletových her. Dr hým potomkem je t ída Screen, která je základnou pro formulá ov orientované prvky. Formulá ov orientované prvky d líme na dv . První jsou velke vstupní komponenty, nebo komponentové kontajnery, které jsou potomky Screen. Jsou to t ídy Alert, Form, List a Textbox. Druhé jsou pak samotné komponetny, potomci t ídy Item, kte í se dají vkládat do objekt kontajnerové t ídy Form pomocí metod add. Tyto t ídy jsou: ChoiceGroup - ekvivalent radiobutton m DateField - nabízí luxusní zp sob pro vkládání data a asu pomocí kalendá e a hodin TextField - vstupní pole pro text StringItem - nápis ImageItem - bitmapový obrázek Gauge - grafický ukazatel Samostatn stojí t ída Ticker, kterou m eme vytvo it efekt textu skrólujícího p es obrazovku. import javax.microedition.midlet.*; import javax.microedition.lcdui.*; class AcumCalc extends Form { TextField a; StringItem si; ChoiceGroup cg; public Command count,exit; public int val=0; public AcumCalc() { super("Kalkula ka"); String op[]={"p i íst","ode íst","násobit","d lit"};
//konstrukce predka tridy
si = new StringItem("Accum:",""); append(si);setValue(0);
//hodnota v akumulatoru
a = new TextField("hodnota","0",4,TextField.NUMERIC); cg = new ChoiceGroup("operace",ChoiceGroup.EXCLUSIVE,op,null); append(a);append(cg);
//vstup hodnoty //volba operace
count = new Command("po itej",Command.ITEM,1); exit = new Command("konec",Command.ITEM,2);
//prikazy pro pocitani //a konec
addCommand(count);addCommand(exit); } public void setValue(int v) { val=v; si.setText(String.valueOf(val)); } public void calculate() { int v=Integer.valueOf(a.getString()).intValue(); switch(cg.getSelectedIndex()) { case 0: setValue(val+v);break; case 1: setValue(val-v);break; case 2: setValue(val*v);break; case 3: setValue(val/v);break; } } } public class CalcMIDlet extends MIDlet implements CommandListener { private Display d; private AcumCalc ac; public void commandAction(Command c, Displayable d) { if(c==ac.count) ac.calculate(); else if(c==ac.exit) notifyDestroyed(); } public CalcMIDlet() { d = Display.getDisplay(this); ac = new AcumCalc(); ac.setCommandListener(this); }
//odchytavac prikazu
ac = new AcumCalc(); ac.setCommandListener(this); } public void startApp(){d.setCurrent(ac);} public void pauseApp(){} public void destroyApp(boolean unconditional){} }
Zdroj 6: Složit jší p íklad využívající uživatelské rozhraní, implementující jednoduchou akumulátorovou kalkula ku
Maniplace s daty Profil MIDP, nabízí ješt n kolik t íd a interfac pro práci s persistentn uloženými daty. Jsou to t ídy balíku javax.microedition.rms. P ístup k t mto dat m se p ípomíná n co mezi prácí s databází a textovým souborem. Nejd ležit jší t ídou je zde RecordStore, která p istupuje k jednotlivým tabulkám(stores) záznam . Její statická metoda listRecordStores() vrátí seznam tabulek. Jiná statickí metoda openRecordStore(String Name,boolean create) otev e tabulku, p ípadn ji vytvo í, pokud neexistuje a parametr create je roven true. closeRecordStore(), deleteRecordStore(..) slouží k zavírání a mazání tabulky. Metody addRecord(..), getRecord(..), setRecord(..), deleteRecord(..) slouží k p idávání, vybírání, zm n a mazání záznam v tabulce, pomocí íselného klí e. Tyto manipulace se záznami tabulky jsou vlastn akce, které mohou vyvolat událost, stejn jako Command v uživatelském rozhraní. K podpo e tohoto p ístupu je zde interface RecordListener, jehož implementací v naší t íd získáme metody, které budou volány, vždy p i p idání, zm n , nebo smazání záznamu. RecordStore musíme s RecordListenerem svázat voláním metody RecordStore.addRecordListener. Další zajímavou možností je definování specifického vyhledávaní pomocí enumeratoru, za použití t íd RecordComparator, RecordEnumeration a RecordFilter.
Kompilace a vytvo ení balíku Máme program ve form zdrojového kódu. Co se s ním dál m e d lat? Nejprve musíme zdrojový soubor p eložit. K tomu nám dob e poslouží stejný p eklada Javy, jako se použil v p ípad applet . Rozdíl je ale v tom, že p i p ekladu applet a konzolových aplikací jsme použili standardní množinu Javových API. Te ovšem používáme nové balíky, jako jsou javax.microedition. Tyto balíky jsme nainstalovali spole n s j2me_wireless_toolkit, ale nemáme k nim cesty. Jedna mošnost je nastavit systémovou prom nnou PATH a druhá možnost je použít parametry p eklada e. v systému UNIX: javac -bootclasspath /usr/local/WTK104/lib/midpapi.zip my_midlet.java
v systému Windows(wireless_toolkit nesmí být nainstalován v adresá i s absolutní cestou, v které je mezera):
javac -bootclasspath C:\WTK104\lib\midpapi.zip my_midlet.java
Takto nám vznikne p eložený program v Javovském bytovem kódu. P eklada p eložil bez ohledu na to, zda je pro aplikaci v MIDP n jaká t ída nebo balík povolen. P eklada má k dipozici všechny t ídy, které mu na vasem systému jsou dostupné. Pro kontrolu a úpravu bytového kódu k použití na MIDP za ízeních slouží takzvaný preverifikátor. Preverifikátor je sou ástí j2me_wireless_toolkit, takže ho m ete použít následujícím zp sobem.
UNIX: preverify -classpath /usr/local/WTK104/lib/midpapi.zip my_midlet.class Windows: preverify -classpath C:\WTK104\lib\midpapi.zip my_midlet.class
preverify -classpath C:\WTK104\lib\midpapi.zip my_midlet.class
Preverifikátor p euspo ádá bytový Java kód a výstupní class soubory uloží implicitn v podadresá i ./output. Dalším v c, kterou si ve spojitosti s vlastnostmi za ízení, kde chcete applikaci použít, je ta, že mobilí p ístroje nemusí mít souborový systém tak, aby jste mohli do n j mohli zkopírovat strukturovanou množinu class soubor a ostatních soubor jako jsou obrázky. Java pro tento ú el navrhla archív JAR. Takže na cílové za ízení zkopíruje jen jeden jednolitý blok binárních dat. Nástroj, který tyto archívy vytvá í a pracuje s nimy je program jar(jar.exe ve Windows). Archív pracuje podobn jako zip, nebo tar s tim rozdílem, že umo uje p ipojit popisovací textový soubor Manifest. Manifest je obecn nepovinný, ale v p ípad MIDlet hraje d ležitou úlohu. Je vn m popsaná verze použitého standardu, názen, výrobce, soubor ikony a p ípadné parametry. Všechno to se dá zjistit pomocí metody getAppProperty. Manifest m e vypadat nap íklad takto:
MIDlet-1: BasicMIDlet,/icon.png,BasicMIDlet MIDlet-Name: BasicMIDlet MIDlet-Vendor: MyCompany MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-1.0
Zdroj 7: P íklad souboru Manifest Z manifestového souboru a preverifikovaných class soubor se vytvo í JAR archív nasledujícím zp sobem: UNIX a Windows: jar cfm BasicMIDlet.jar Manifest BasicMIDlet.class icon.png
Te už jsme tém u cíle. Poslední co musíme udelat je popisovací soubor JAD. Neboli Jar Descriptor. Tento soubor je textový a má stejný smysl a formát jako Manifest. Malinko s ale lyší v parametrech. Tabulka 5 shrnuje typy parametr , které se dají použít, nebo jsou povinné v Manifestu a v JAD souboru. Podstatný parametr, který je nutné správn vyplnit je MIDlet-Jar-Size. Jeho hodnota má být správná velkost JAR archívu v bytech. Povinné atributy Jméno MIDletu tak jak ho uvidí uživatel v AMS.
MIDlet-Name
JAD i manifest
MIDlet-Version
JAD i manifest
MIDlet-Vendor
JAD i manifest
MIDlet-Jar-URL
JAD
MIDlet-Jar-Size
JAD
MicroEdition-Profile
manifest
MicroEdition-Configuration
manifest
Nepovinné atributy MIDlet-Icon
JAD i/nebo manifest
MIDlet-Description
JAD i/nebo manifest
MIDlet-Info-URL
JAD i/nebo manifest
MIDlet-Data-Size
JAD i/nebo manifest
MIDlet-Delete-Confirm MIDlet-Install-Notify |User-Defined Attributes| Tabulka 5: Balíky p idané profilem PDAP
JAD
Tabulka 5: Balíky p idané profilem PDAP Takto p ipravený program m eme nahrát do mobilního za ízení pomocí n jakého obslužného programu dodaného výrobcem. K p enosu je možné použít datový kabel do seriovéhého portu, nebo IrDa. Jinou možností, která je vhodná v dob kdy je program teprve vyvýjen je emulátor. Emulátor typický simuluje jak by byl program prová en na mobilním telefonu, nebo PDA ku, v etn grafické podoby p ístroje. Emulátor je také sou ástí j2me_wireless_toolkit. Je možné s ním simulovat n kolik r zných p ístroj , s odlyšnými parametry, jako je velikost displaye. Nakonec tedy už jen zbývá spustit program v emulátoru:
UNIX a Windows: emulator -Xdescriptor:BasicMIDlet.jad
Obr.7: Emulovaný virtuální mobilní telefon se spušt ným MIDletem kalkula ky
P íklad vymyslet priklad
Reference Internetové zdroje a odkazy: http://java.sun.com - Zde je možné si stáhnout Javu a dokumentaci k ní. http://wireless.java.sun.com - Sekce spole nosti Sun v nované bezdrátovým technologii, p evážn J2ME. http://www.javamobil.cz - eská stránka v novaná mobilní Jav
technologii, p evážn J2ME. http://www.javamobil.cz - eská stránka v novaná mobilní Jav ... Knihy: David Flanagan: Programování v jazyce Java, O'Reilly, p eklad v Computer Press Mark C. Chan a spol: 1001 tip Java, Unis publishing Philip Heller a Simon Roberts: Java 2 Developer's Handbook ...