Image
27.6.2016 0 Comments

Programujeme v Jave /1.časť

Späť na úvod >> Späť na programovanie >> Späť na seriál

V predošlom seriály ste sa mohli naučiť základy programovania v Jave, na ktoré by som rád nadviazal. Tento seriál je preto určený tým, ktorí už ovládajú základy jazyka Java a chceli by sa venovať pokročilejším a špecifickejším témam tohto jazyka, resp. platformy. Preto pri jeho tvorbe budem predpokladať základné znalosti syntaxe jazyka Java, ako aj objektovo orientovaného programovania zo strany čitateľov. Pokiaľ tieto základy nemáte, odporúčam preštudovať si už zmienený seriál Java pod lupou.

Prečo Java?

Java sa za niekoľko rokov svojej existencie stala mimoriadne obľúbeným programovacím jazykom. Dôvodov je hneď niekoľko. Patrí medzi ne hlavne jednoduchá portabilita aplikácií medzi rôznymi operačnými systémami, podpora takmer všetkých druhov aplikácií od desktopových až po distribuované a, samozrejme, nepreberné množstvo dodávaných tried. V poslednom čase sa o architektúre .NET hovorí ako o konkurencii Javy (pokiaľ sa pozeráme na Javu ako platformu, nie ako na programovací jazyk). Nechcem tu filozofovať nad tým, či je lepšia Java alebo .NET. Každá technológia má svoje plusy aj mínusy. Java má síce niekoľkoročný náskok, .NET zase silné zázemie vďaka podpore Microsoftu. Treba to vidieť tak, že vďaka konkurencii môžeme očakávať lepšiu kvalitu bez ohľadu na to, či sme priaznivcami jednej alebo druhej technológie. Profitovať z toho môžu spotrebitelia, ktorými sú nielen užívatelia aplikácií, ale vlastne aj ich programátori.

Java je veľmi výkonný nástroj, ktorý umožňuje programátorom vytvoriť takmer hocičo. Hoci bola pôvodne určená na implementáciu v domácich elektrospotrebičoch, dnes zasahuje do mnohých sfér IT priemyslu. Dajú sa v nej písať desktopové aj serverové aplikácie, vytvárať dynamické webové stránky, dá sa používať na prístup k dátam, umožňuje realizovať zložité distribuované výpočty a veľa ďalšieho. Pokiaľ sa rozhodnete dozvedieť sa o Jave viac, tento seriál je určený práve vám.

Prerekvizity

Na to, aby ste mohli vytvárať svoje javovské aplikácie, musíte mať k dispozícii Java Development Kit (JDK), ktorý si môžete stiahnuť zo stránky http://java.sun.com. Pri témach, ktorým sa budeme venovať na začiatku, vám stačí verzia Standard Edition. Neskôr sa budeme venovať aj Enterprise Edition, ktorú si však zatiaľ sťahovať nemusíte. Verzia Standard Edition (SE), ktorú budem používať ja, nesie označenie 1.4.0. V čase písania tohto článku je však k dispozícii aj verzia 1.4.1, ktorú môžete tiež používať. Rozdiely medzi nimi nie sú natoľko markantné, aby nám bránili používať obe tieto verzie pri písaní, kompilovaní a spúšťaní programov z tohto článku. Odporúčam však nepoužívať verziu 1.3.x alebo nižšiu. Neznamená to síce, že programy, ktoré tu budem uvádzať, pod touto verziou nepobežia, ale verzia 1.4.x prináša oproti starším niekoľko inovácií a výhod, o ktoré by bolo škoda sa pripraviť. Po stiahnutí a nainštalovaní JDK SE budete mať pripravené všetko, čo potrebujete na štúdium Javy z tohto seriálu (samozrejme, je potrebný ešte nejaký editor, o tomto si však povieme neskôr).

Novinky v JDK 1.4.x

Možno niektorých z vás, ktorí sa už Jave viac alebo menej venovali, zaujíma, čo nové prináša posledná verzia JDK s označením 1.4.x. Vždy, keď sa zvýši druhá číslica označenia verzie JDK, znamená to, že ide o väčšiu zmenu oproti starším verziám, než je to v prípadoch, keď sa verzie líšia iba treťou číslicou. Noviniek v JDK 1.4.x je veľmi veľa, preto vymenujem iba tie najzaujímavejšie z nich. Patrí medzi ne hlavne pridanie tried na spracovanie dokumentov XML, nové triedy pre vstupno-výstupné operácie či podpora kryptovania a šifrovania priamo v JDK (predtým boli tieto triedy súčasťou voliteľných balíkov). Na začiatku seriálu budú pre nás zaujímavé novinky implementované v balíkoch Swing a AWT, či už pôjde o nové komponenty, alebo zlepšenie výkonu. Zaujímavá je takisto nová podpora tlače a zlepšený výkon Java 2D. Pre niekoho môže byť lákadlom nové JDBC vo verzii 3.0 na prístup k databázam alebo podpora nových štandardov (napr. IPv6) v sieťovom programovaní. A to je iba časť z inovácií, ktoré nová verzia JDK prináša. Pokiaľ vás táto téma zaujíma podrobne, odporúčam navštíviť domovskú stránku Javy na adrese http://java.sun.com, prípadne nahliadnuť do dokumentácie.

Swing

Knižnica Swing obsahuje triedy, ktoré vám dovolia vytvoriť akokoľvek zložité používateľské rozhranie – obsahuje komponenty GUI, triedy udalostí na ich obsluhu a všetko ďalšie, čo budete potrebovať pri tvorbe plnohodnotných desktopových aplikácií s grafickým používateľským rozhraním a takisto appletov. Pôvodne bola na túto úlohu určená knižnica AWT (Abstract Window Toolkit), ale ako sa Java, resp. jej knižnice vyvíjajú v čase, AWT sa postupne nahrádza knižnicou Swing. Pôvodná AWT mala niekoľko nevýhod, pričom jednou z hlavných bola nízka výkonnosť, alebo ak chcete, rýchlosť aplikácií. S príchodom Swing sa situácia dosť zlepšila a zatiaľ posledné verzie JDK (1.4.x) tiež značne zlepšili kvalitu tejto knižnice. My budeme preto v našich programoch používať Swing, aj keď sa v niektorých prípadoch nevyhneme použitiu nejakej triedy z knižnice AWT, hlavne čo sa bude týkať udalostného modelu.

Applety

Prvou témou, ktorej sa v našom seriáli budeme venovať, sú applety. S appletmi ste sa s veľkou pravdepodobnosťou už na webe stretli. Bývajú súčasťou webových stránok, väčšinou v podobe interaktívnych menu, chatov či iných ich rozšírení. Ten, kto si chce prezerať stránky s appletmi, musí mať nainštalovanú Java Virtual Machine.

Applety predstavujú jednoduché, ale efektné rozšírenie webových stránok. Výhodou je nezávislosť kódu od platformy, takže stačí napísať program (applet), skompilovať ho a ten pobeží pod akýmkoľvek operačným systémom, ale to sú už vám iste známe fakty. Applety nie je potrebné nijako inštalovať na hostiteľský počítač – stačí umiestniť potrebný kód HTML na stránku a o všetko ostatné sa postará prehliadač v spolupráci s JVM. A aj napriek tomu môžete využívať všetky výhody Javy, resp. všetky triedy, ktoré potrebujete, a môžete tak vďaka tomu vytvoriť na vašich stránkach čokoľvek – od interaktívnych menu až po zložitejšie hry.

Appletov sa však predsa len týkajú nejaké obmedzenia a nevýhody. Jedným z najväčších je asi obmedzenie prístupu k triedam pre I/O operácie. Applety totiž vo všeobecnosti nesmú pristupovať k disku používateľa. Šlo by totiž o dosť nebezpečný nástroj, keby čítanie alebo zápis mali applety povolený. Takýto nástroj by bolo veľmi jednoduché zneužiť, a preto JVM veľmi dobre stráži applety a nedovolí im pristupovať na disk. Obsah webu je veľmi ľahko prístupný a nebezpečné applety by sa mohli veľmi ľahko rozšíriť. Toto obmedzenie sa dá obísť digitálnym podpísaním appletu či celého archívu. Potom sa sám používateľ môže rozhodnúť, či bude dôverovať certifikačnej autorite, ktorá digitálny certifikát vydala, a či povolí appletu prístup na disk. Ďalšou nevýhodou, o ktorej by sa dalo hovoriť, je pomerne značná náročnosť na rýchlosť pripojenia používateľa. Pri objemnejších appletoch môže trvať dosť dlho, kým sa stiahnu všetky potrebné súbory, čo môže odradiť hlavne používateľov s dial-upom. K tomu treba prirátať možnosť, že používateľ ešte nemá nainštalovanú JVM, prípadne aspoň plugin na podporu appletov v browseri. Toto všetko môže používateľa s pomalším pripojením od návštevy vašej stránky odradiť, a preto by ste mali applety používať v rozumnej miere a umiestňovať ich hlavne tam, kde je ich funkcionalita naozaj nevyhnutná alebo vhodná.

Prvý applet

Každý applet je potomkom triedy JApplet. Toto platí pre knižnicu Swing, v pôvodnej knižnici AWT boli applety potomkami triedy Applet. Z dôvodov, o ktorých som už písal, sa budeme venovať knižnici Swing, a teda applety budeme odvádzať od triedy JApplet. Pre knižnicu Swing je typické, že triedy majú rovnaké názvy ako obdobné triedy v AWT s pridanou predponou J-. Takže triedy, ktoré budeme v súvislosti s appletmi a neskôr s aplikáciami opisovať, sa budú začínať vo väčšine prípadov písmenom J (pôjde hlavne o vizuálne komponenty). Pri študovaní dokumentácie JDK iste prídete na to, že veľa tried knižnice Swing je odvodených od tried knižnice AWT, pričom JApplet nie je v tomto ohľade výnimkou (je okrem iného aj potomkom triedy Applet).

Applety disponujú niekoľkými dôležitými metódami, ktoré dedia od svojej rodičovskej triedy JApplet. Rozoberieme si tie najpodstatnejšie z nich:

init() – táto metóda je volaná hneď po natiahnutí appletu do pamäte. Vo svojich appletoch by ste túto triedu mali vždy prekrývať a vykonať potrebnú inicializáciu členských dát svojho appletu alebo ďalšiu inicializačnú činnosť. V triede JApplet (resp. Applet) je táto metóda prázdna, resp. nevykonáva nič. Táto metóda je napríklad vhodným miestom na nastavenie atribútov appletu, napr. jeho veľkosti. Na to slúži metóda setSize(), ktorú dedí od triedy Component. Táto metóda vyžaduje ako parameter inštanciu triedy Dimension. Stačí takúto inštanciu skonštruovať (parametrami konštruktora sú dve celé čísla – šírka a výška) a odovzdať metóde setSize(). Druhou možnosťou je odovzdať tejto metóde priamo celočíselné hodnoty typu int predstavujúce šírku a výšku. Ktorý postup uprednostníte, to záleží iba na vás. Takže ak chceme inicializovať a zobraziť applet tak, aby jeho veľkosť v prehliadači bola 200 × 150, môžeme to spraviť takto:

setSize(new Dimension(200, 150));
alebo takto:
setSize(200, 150);
Metóda init() je volaná iba raz za celý čas od spustenia do zatvorenia (zrušenia) appletu.

start() – metóda start() je spúšťaná vždy, keď by mal applet začať vykonávať činnosť, na ktorú je určený, alebo obnoviť svoju aktivitu po jej zastavení zavolaním metódy stop(). Je volaná vždy, keď sa applet dostane „na oči“, resp. vždy, keď používateľ zaktívni (maximalizuje) okno, v ktorom applet beží. Takisto je zavolaná po skončení metódy init().

stop() – je doplnkom metódy start() – jej úlohou je zastaviť zbytočnú činnosť appletu po zneaktívnení (minimalizovaní) okna. Spolu s metódou start() predstavuje jednoduchý mechanizmus, ktorým je možné šetriť systémové prostriedky v čase, keď používateľ appletu nevenuje pozornosť. Príkladom môže byť vykresľovanie nejakej cyklicky sa opakujúcej a náročnej animácie. V metóde stop() môžete animáciu prerušiť a šetriť tak čas procesora a v metóde start() zase vykresľovanie animácie obnoviť. Metóda stop() je volaná takisto pred spustením metódy destroy().

destroy() – metóda je volaná pri ukončení behu programu. V tejto metóde by ste sa mali postarať o uvoľnenie všetkých systémových prostriedkov, ktoré váš applet vlastní.

Príklad

S vedomosťami, ktoré ste doposiaľ nadobudli, sa môžeme pustiť do nášho prvého appletu. Vytvoríme applet, ktorý bude obsahovať všetky metódy opísané v predchádzajúcej podkapitole, a názorne si ukážeme, ako tieto metódy fungujú, resp. kedy sú volané.

import javax.swing.*;
import java.awt.*;
 
public class MojApplet extends JApplet {
 
  public void init() {
    this.setSize(new Dimension(200, 150));  /* nastavenie velkosti appletu */
    System.out.println("metoda init()");
  }
 
  public void start() {
    System.out.println("metoda start()");
  }
 
  public void stop() {
    System.out.println("metoda stop()");
  }
 
  public void destroy() {
    System.out.println("metoda destroy()");
  }
 
}

Tento applet uložte pod menom MojApplet.java a skompilujte ho príkazom

javac MojApplet.java

(samozrejme, tento príkaz sa môže líšiť od vášho systémového nastavenia – predpokladám však, že kompiláciu zvládnete už bez problémov).

Náš prvý applet obsahuje metódy, ktoré sme si už opisovali, a aby sme mohli testovať ich postupné spúšťanie, vypisujeme informáciu pri každom vstupe do jednotlivých metód na štandardný výstup. Teraz applet spustite (postup, ako to urobiť, je v podkapitole Testovanie a publikovanie appletov) a skúste opakovane minimalizovať a maximalizovať okno AppletViewera a sledujte výpisy v konzole. Po jednej minimalizácii, maximalizácii a zatvorení by mal výpis vyzerať asi takto:

metoda init()
metoda start()
metoda stop()
metoda start()
metoda stop()
metoda destroy()

Testovanie a publikovanie appletov

Je logické, že pri programovaní appletov ich budete chcieť občas (často) testovať. Pri testovaní appletov máte dve možnosti: buď si vytvoríte jednoduchý súbor HTML, do ktorého vložíte potrebný kód, a budete si prezerať applety v prehliadači, alebo sa zaobídete bez týchto malých súborov HTML a spustíte applet v aplikácii s názvom AppletViewer, ktorá sa dodáva spolu s JDK.

Ak ste sa rozhodli pre prvú možnosť, vytvorte si súbor HTML (napr. test.html) a doň vložte nasledujúci kód:

<applet code=MojApplet>
</applet>

Ako vidíte, je to veľmi jedoduché – v tagu applet špecifikujete parameter code, ktorého hodnotou je názov triedy appletu. Tag applet má ešte ďalšie parametre (napr. výšku, šírku), ale tie nie sú cieľom tohto seriálu. Teraz stačí vo vašom prehliadači otvoriť tento súbor a výsledkom je azda zobrazenie vášho prvého appletu (zatiaľ iba v podobe prázdneho sivého obdĺžnika). Problémom je práve to slovo azda. Je možné, že váš prehliadač nezobrazí nič a príčinou tohto problému je to, že rôzne prehliadače implementujú tento tag rôzne alebo v horšom prípade ho neimplementujú vôbec. Tento stav je výsledkom „vojny prehliadačov“ a doplatili sme na to hlavne my programátori. Preto je rozumnejšie používať pri testovaní a publikovaní appletov tag <object>. Jeho syntax je dosť zložitá, a preto vám určite príde vhod grafická utilita HtmlConverter (je umiestnená v podadresári bin inštalačného adresára JDK, pod Windows je názov súboru HtmlConverter.exe). Stačí vytvoriť pomocný súbor HTML ako v predchádzajúcom prípade s tagom <applet> (napr. test.html), následne ho podstrčiť HtmlConverteru, kliknúť na Convert… a HtmlConverter vám v súbore test.html prepíše tag applet na tag object, ktorého kód vyzerá celkom hrozivo, ale vy ste nemuseli napísať ani čiarku z neho. Teraz stačí výsledný súbor test.html otvoriť vo vašom prehliadači. Opisovaný postup sa odporúča pri publikovaní finálnych verzií appletov, budete tak mať istotu, že applet sa zobrazí každému návštevníkovi bez ohľadu na používaný prehliadač.

Alternatívnou možnosťou pri testovaní appletov (bez nutnosti vytvárať malé testovacie súbory HTML) je použiť utilitu appletviewer (vo Windows appletviewer.exe, umiestnenie je rovnaké ako v prípade HtmlConvertera). HTML tag applet treba vložiť do zdrojového kódu appletu a zakomentovať ho, najlepšie na začiatok súboru, teda asi takto:

// <applet code=MojApplet>
// </applet>

Utilita appletviewer ignoruje všetko okrem tagov applet, a preto ju môžete vložiť priamo do zdrojového textu. Spustite z príkazového riadka appletviewer s názvom súboru so zdrojovým kódom ako parametrom:

appletviewer c:\applety\MojApplet.java

Malo by sa vám zobraziť okno s appletom a vy môžete sledovať výpisy appletu priamo na konzole, z ktorej ste appletviewer spustili. Samozrejme, musíte zadať skutočnú cestu umiestnenia vášho appletu.

Appletviewer používam pri testovaní appletov najčastejšie, pretože sa vyhnem zbytočným súborom HTML. Pred umiestnením appletu na web vygenerujem pomocou HtmlConvertera potrebný kód HTML a ten skopírujem do potrebnej časti kódu HTML stránky. Aký spôsob testovania a publikovania appletov budete používať vy, záleží len na vás, tu som sa vám snažil iba ukázať možné cesty.

Záver

V úvodnej časti sme sa venovali úplným základom programovania javovských appletov. Pokiaľ vás táto tematika zaujala, dúfam, že vás upútajú aj ďalšie časti seriálu, v ktorých sa budeme venovať vizuálnym komponentom a ich opisu, ako aj spôsobu ich rozmiestňovania na ploche appletu.

Čo by ste si mali pozrieť:

http://java.sun.com

Java 2 Platform API Specification (dokumentácia)

http://www.bruceeckel.com

Core Java 2, Volume I & II,Gary Cornell, Cay S. Horstmann, Prentice Hall PTR

Professional Java Programming, Brett Spell, Wrox Press

Autor: Andrej Chu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

ITPro

Linux súkromne i pracovne v2.0 (14. časť): Small Business Server

09.11.2016 14:57

Pojem Small Business Server (malý firemný server) začala používať spoločnosť Microsoft ešte v roku 2000 na označenie servera, ktorý ­dokázal plniť úlohy niekoľkých samostatných serverov. Aplikačná vrs ...

ITPro

Industry 4.0: Fikcia alebo už realita?

09.11.2016 14:52

Štvrtá priemyselná revolúcia je pomenovanie rozsiahlych zmien prudko vstupujúcich do súčasného priemyslu. Nositeľom týchto zmien je digitalizácia výroby a optimalizácia všetkých podnikových procesov v ...

ITPro

Vývoj aplikácií UWP pre Xbox One II.

09.11.2016 14:47

V predošlej časti sme ukázali postup, ako si ­vytvoriť vývojársky účet a aktivovať vývojársky režim na hernej konzole Xbox One, aby ste mohli testovať svoje aplikácie. Výhodou hernej konzoly Xbox je v ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá