Midlet je aplikace v Javě pro mobilní telefon. Některými vlastnostmi se podobá apletu. Musí rozšiřovat speciální třídu MIDlet a v telefonu běží z bezpečnostních důvodů v tzv. sandboxu, neboli na svém vlastním pískovišti, které nemůže opustit. Ukáži vám, co vše je potřeba k nápsání jednoduchého midletu.

Kde vzít vývojové prostředí?

  1. Jako základ budete potřebovat instalaci J2SDK, kterou si můžete stáhnout třeba ze stránek http://java.sun.com.
  2. Budete také potřebovat implementaci CLDC a MIDP. Dobré je stáhnout si J2MEWTK (J2ME wireless toolkit), kde jsou, kromě referenční implementace CLDC a MIDP, také pomocné programy. Toto prostředí neumožňuje editaci zdrojových kódů, ale jde integrovat do některých vývojových prostředí (např. Forte nebo JBuilder).
  3. Doporučuji aplikaci otestovat i v emulátoru telefonu, pro který ji vyvíjíte. Má-li být pro různé telefony, tak v co nejvíce emulátorech. Odkazy na stránky, kde se dají tyto emulátory stáhnout, najdete na konci článku.

Životní cyklus midletu

Základní třída musí rozšiřovat abstraktní třídu javax.microedition.midlet.MIDlet. Při spouštění aplikace je tato třída vytvořena zavoláním svého veřejného konstruktoru bez parametrů. Stavy, ve kterých se může midlet nacházet, ukazuje následující obrázek. Běh aplikace a její přechod mezi stavy řídí aplikační manažer.


Stavy midletu

Po zavolání konstruktoru se aplikace nachází v pasivním stavu. V tomto stavu by neměla vlastnit či používat žádné sdílené zdroje. Pro přechod z pasivního stavu do aktivního stavu je zavolána metoda startApp(). V této metodě aplikace inicializuje zdroje typu Thread, Connection ap. Při volání metody pauseApp(), kterou se aplikace vrací do pasivního stavu, by měla aplikace tyto zdroje opět uvolnit. Při ukončení aplikace zavolá aplikační manažer metodu destroyApp(boolean unconditional). Pokud je parametr true, bude aplikace ukončena v každém případě, pokud je false, může dát vyhozením výjimky MIDletStateChangeException najevo, že ještě ukončena být nechce.

Konečně zdrojový kód

Následující kód si zkopírujte do souboru s názvem HelloWorld.java.

import javax.microedition.lcdui.*; import javax.microedition.midlet.*; /** * Základní (a jediná) třída aplikace, která vypíše na * displej telefonu nápis Hello World! */ public class HelloWorld extends MIDlet implements CommandListener { TextBox textBox; Command exit; /** * Konstruktor midletu – inicializuje základní proměnné, * které nezabírají systémové zdroje */ public HelloWorld() { /* * První parametr se zobrazí na horním řádku displeje * jako jeho název. * Druhý parametr je obsah TextBoxu * Třetí parametr je maximální počet znaků, které se * vejdou do textového boxu * Čtvrtý parametr obsahuje vstupní omezení. */ textBox = new TextBox( „1. midlet“, „Hello World!“, 50, TextField.ANY); /* * Aby se dala aplikace regulérně ukončit, je potřeba * přidat příkaz exit… */ exit = new Command(„Konec“, Command.BACK, 1); textBox.addCommand(exit); /* * …a nastavit vlastní implementaci rozhraní * CommandListener, která zpracuje volání příkazů. */ textBox.setCommandListener(this); } /** * Tuto metodu zavolá aplikační manažer při startu aplikace, * zde se nastavuje startovní obrazovka aplikace */ protected void startApp() throws MIDletStateChangeException { /* * Nastavení aktuální obrazovky */ Display.getDisplay(this).setCurrent(textBox); } /** * Tuto metodu zavolá aplikační manažer při přechodu do * pasivního stavu. Protože je u třídy MIDlet abstraktní, * musí tu být aspoň prázdná implementace */ protected void pauseApp() { } /** * Tuto metodu zavolá aplikační manažer, když chce * ukončit aplikaci. Pokud je parametr false, může midlet * ukončení odmítnout vyhozením výjimky * MIDletStateChangeException. */ protected void destroyApp(boolean unconditional) throws MIDletStateChangeException { } /** * Metoda rozhraní CommandListener */ public void commandAction(Command c, Displayable d) { /* * Kontrola, který příkaz byl zavolán */ if (c.equals(exit)) { try { /* * Tady to vypadá trochu komicky, volat metodu, * která nic nedělá, ale v složitější aplikaci * metoda destroyApp() provede uložení nastavení * nebo stavu aplikace. */ destroyApp(true); /* * Metoda notifyDestroyed() dá najevo aplikačnímu * manažerovi, že tato aplikace chce být ukončena. * Aplikační manažer poté už nevolá metodu * midletu destroyApp() */ notifyDestroyed(); } catch (Exception e) { /* * Tady můžete mít při testování v emulátorech * např. e.printStackTrace() * Při běhu aplikace v telefonu je lepší se všem * pokusům o výpis na konzoli vyhnout – zpomalují * běh aplikace. */ } } } }

Spuštění midletu v J2MEWTK

V následujícím textu J2MEWTK_HOME označuje domovský adresář aplikace J2MEWTK.

  1. Nainstalujte si J2MEWTK. Po instalaci spusťte ktoolbar, který se nachází v J2MEWTK_HOME/bin. Pokud pracujete pod operačním systémem Windows, přidá se vám spuštění této aplikace do startovacího menu.
  2. Vytvořte nový projekt se jménem HelloWorld a jménem midletu HelloWorld. Žádná další nastavení není třeba upravovat. (New project…)
  3. Do adresáře J2MEWTK_HOME/apps/HelloWorld/src uložte soubor HelloWorld.java se zdrojovým kódem midletu.
  4. V aplikaci ktoolbar otevřete projekt HelloWorld. (Open project…)
  5. Přeložte projekt. (Build)
  6. Spusťte projekt. (Run)
  7. Na telefonu, který se vám objeví, zmáčkněte myší tlačítko pod nápisem launch, nebo na klávesnici stiskněte tlačítko Enter a midlet se spustí (viz obrázek).


Emulátor od firmy Sun

Nástroje k tvorbě a testování midletů

J2MEWTK je k dispozici pro operační systémy Windows, Solaris a Linux. Snad každý výrobce zařízení podporujících Javu poskytuje vlastní nástroje pro usnadnění vývoje a testování aplikací. Bohužel tyto nástroje jsou obvykle pouze pro operační systém Windows.

  • J2MEWTK
    – základní nástroj od firmy Sun
  • Forum Nokia
    – komunita vývojářů pro telefony nokia. Je zde možno stáhnout programy pro vývoj aplikací, zjistit specifikaci jednotlivých telefonů, nebo se zeptat na radu s nějakým problémem.
  • Siemens
    – zdroje specifické pro telefony Siemens
  • Motorola
    – zdroje specifické pro telefony Motorola

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

5 Příspěvků v diskuzi

  1. dobrý den, vše potřebné jsem si nainstaloval pro tvorbu midletů. když spustím J2MEWTK, vytvořím HelloWorld projekt, otevřu HelloWorld.java, stisknu built a zobrazí se mi hláška „Build failed“.
    Co dělám prosím špatně :-)

  2. ako to vysvetlil ked neviem ani kde mam urobit HelloWorld.java ? aspon to vysvetli normalne nepochopil som z toho nic !

  3. Nemáte náhodou někdo tušení, jak vložit na web odkaz pro stažení JAR aplikace z mobilu? Pokud vložím odkaz standardně, do mobilu (Nokia) se mi vloží soubor se změněnou příponou, který nelze spustit.
    Hledal jsem řešení na internetu, bohužel bez úspěchu
    – na stránkách Nokia (pro mobily) je po načtení stránky pro stažení hry (na PC), a po klepnutí na odkaz, stažen soubor „interface“ bez přípony – z toho tedy usuzuji, že se to prostě dělá „ňák jinak“.

Odpovědět