You are on page 1of 60

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

Java 2. Podstawy

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

Autorzy: Cay S. Horstmann, Gary Cornell


Tumaczenie: Maciej Gorywoda
ISBN: 83-7197-984-3
Tytu oryginau: Core Java 2 Volume 1 Fundamentals
Format: B5, stron: 740

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Java 2. Podstawy jest najlepsz ksik dla programistw. Nie ma sobie rwnych pod
wzgldem iloci przekazanych informacji, a mimo to pozostaje bardzo czytelna.
K. N. King, Computer Reviews
Programici znajd tu wszystko, czego potrzeba, aby wykorzysta potg jzyka Java
PC Week
Java 2. Podstawy dostarcza wszystkiego, czego potrzebujesz, aby ukoczy nawet
najbardziej skomplikowane projekty. Dlatego wanie ta ksika przez pi lat bya
midzynarodowym bestsellerem. Java 2. Podstawy omawia podstawy platformy Java
2 Standard Edition w wersji 1.3, zawiera peny opis zorientowanego obiektowo
rodowiska programistycznego Javy, komponentw interfejsu uytkownika Swing
i wiele, wiele wicej.
Pita wydanie prezentuje wiele nowych, gotowych do zastosowania programw,
z ktrych zasyny poprzednie edycje tej ksiki: pojawiy si rwnie nowe programy
dotyczce mechanizmu odbicia oraz optymalizacji kodu. Szczegowo wyjaniono
koncepcj klas wewntrznych, funkcjonowanie proxy, obsug wyjtkw, techniki
usuwania bdw, model zdarze Javy, interfejs wejcia/wyjcia oraz zarzdzania
plikami.
Kompendium dla programistw Javy, a w nim:
Omwienie jzyka Java i tworzenia aplikacji w rodowisku Forte(tm)
Tworzenie aplikacji GUI przy pomocy nowych klas Swing
Sposoby pisania klas proxy i klas wewntrznych
Korzystanie z modelu zdarze Javy
Omwienie klas strumieni oraz mechanizmu zarzdzania plikami

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Spis treci
Podzikowania............................................................................................................................... 11
Przedmowa ...................................................................................................................................13
Do Czytelnika ........................................................................................................................ 13
O ksice............................................................................................................................... 15

Rozdzia 1. Wprowadzenie do Javy..................................................................................................17


Java jako narzdzie programistyczne..................................................................................... 18
Zalety Javy............................................................................................................................. 19
Koncepcje jzyka Java........................................................................................................... 20
Prosty .............................................................................................................................. 20
Zorientowany obiektowo .................................................................................................. 21
Rozproszony..................................................................................................................... 22
Niezawodny...................................................................................................................... 22
Bezpieczny....................................................................................................................... 23
Neutralny pod wzgldem architektury............................................................................... 24
Przenony ........................................................................................................................ 24
Interpretowany ................................................................................................................. 25
Wydajny ........................................................................................................................... 25
Wielowtkowy .................................................................................................................. 25
Dynamiczny...................................................................................................................... 26
Java i Internet........................................................................................................................ 26
Aplety w dziaaniu ............................................................................................................ 27
Java po stronie serwera................................................................................................... 28
Krtka historia Javy ............................................................................................................... 28
Gwne nieporozumienia dotyczce Javy ............................................................................... 31

Rozdzia 2. rodowisko programistyczne Javy .............................................................................35


Instalowanie pakietu Java Software Development Kit............................................................ 36
Konfiguracja cieki dostpu ........................................................................................... 36
Instalowanie bibliotek i dokumentacji .............................................................................. 37
Instalowanie przykadowych programw ksiki Core Java............................................... 38
Drzewo katalogw Javy .................................................................................................... 38
Rne rodowiska programistyczne....................................................................................... 39
Korzystanie z linii polece ..................................................................................................... 40
Rozwizywanie problemw ............................................................................................... 42
Praca ze zintegrowanym rodowiskiem programistycznym..................................................... 43
Wyszukiwanie bdw kompilacji...................................................................................... 44
Kompilowanie i uruchamianie programw przy uyciu edytora tekstu .................................... 46
Aplikacje graficzne................................................................................................................. 48
Aplety .................................................................................................................................... 51

Java 2. Podstawy
Rozdzia 3. Podstawy programowania w Javie..............................................................................57
Prosty program napisany w Javie........................................................................................... 58
Komentarze ........................................................................................................................... 60
Typy danych........................................................................................................................... 61
Liczby cakowite ............................................................................................................... 62
Typy zmiennoprzecinkowe ................................................................................................ 62
Typ znakowy..................................................................................................................... 63
Typ boolean ..................................................................................................................... 64
Zmienne ................................................................................................................................ 65
Przypisanie i inicjalizacja ....................................................................................................... 66
Stae ................................................................................................................................ 66
Operatory .............................................................................................................................. 67
Operatory inkrementacji i dekrementacji.......................................................................... 69
Operatory relacji i typu boolean ....................................................................................... 69
Operatory bitowe.............................................................................................................. 70
Funkcje i stae matematyczne.......................................................................................... 71
Konwersje pomidzy typami numerycznymi...................................................................... 72
Rzutowanie ...................................................................................................................... 73
Hierarchia nawiasw i operatorw ................................................................................... 73
acuchy ............................................................................................................................... 74
Konkatenacja................................................................................................................... 74
Wycinanie acuchw....................................................................................................... 75
Edycja acuchw............................................................................................................. 75
Porwnywanie acuchw................................................................................................. 77
Czytanie dokumentacji API online .................................................................................... 79
Czytanie danych............................................................................................................... 81
Formatowanie wyjcia ...................................................................................................... 83
Instrukcje sterujce............................................................................................................... 86
Blok instrukcji .................................................................................................................. 86
Instrukcje warunkowe ...................................................................................................... 87
Ptle nieokrelone........................................................................................................... 89
Ptle okrelone................................................................................................................ 93
Wielokrotny wybr polecenie switch ............................................................................ 96
Przerywanie instrukcji sterowania .................................................................................... 98
Wielkie liczby ....................................................................................................................... 100
Tablice................................................................................................................................. 102
Inicjalizacja tablic i tablice anonimowe .......................................................................... 103
Kopiowanie tablic........................................................................................................... 104
Parametry linii polece .................................................................................................. 105
Sortowanie tablicy ......................................................................................................... 106
Tablice wielowymiarowe................................................................................................. 109
Tablice nierwnej dugoci ............................................................................................. 112

Rozdzia 4. Obiekty i klasy ............................................................................................................ 115


Wprowadzenie do programowania zorientowanego obiektowo............................................. 116
Sownictwo OOP............................................................................................................. 117
Obiekty .......................................................................................................................... 118
Relacje pomidzy klasami.............................................................................................. 119
Porwnanie OOP z konwencjonalnymi technikami programowania proceduralnego........ 121
Korzystanie z istniejcych klas ............................................................................................ 123
Obiekty i zmienne obiektw ........................................................................................... 123
Klasa biblioteczna GregorianCalendar ........................................................................... 126

Spis treci

Tworzenie wasnych klas ..................................................................................................... 133


Klasa Pracownik ............................................................................................................ 133
Uywanie wielu plikw rdowych rwnoczenie ........................................................... 136
Analiza klasy Pracownik ................................................................................................. 137
Pierwsze dowiadczenia z konstruktorami ..................................................................... 137
Metody klasy Pracownik................................................................................................. 139
Metody dostpu do danych prywatnych ......................................................................... 142
Metody prywatne............................................................................................................ 143
Finalne pola skadowe ................................................................................................... 143
Pola i metody statyczne....................................................................................................... 144
Pola statyczne ............................................................................................................... 144
Stae .............................................................................................................................. 145
Metody statyczne........................................................................................................... 146
Metody fabryczne........................................................................................................... 147
Metoda main ................................................................................................................. 147
Parametry metod................................................................................................................. 150
Konstrukcja obiektw .......................................................................................................... 155
Przeadowanie................................................................................................................ 155
Domylna inicjalizacja pl skadowych........................................................................... 156
Konstruktory domylne .................................................................................................. 157
Bezporednia inicjalizacja pl skadowych ..................................................................... 157
Nazwy parametrw......................................................................................................... 158
Wywoywanie innego konstruktora ................................................................................. 159
Bloki inicjalizacji............................................................................................................. 160
Niszczenie obiektw i metoda finalize............................................................................ 163
Pakiety ................................................................................................................................ 164
Wykorzystanie pakietw................................................................................................. 164
Komentarze dokumentacji ................................................................................................... 172
Wstawianie komentarzy ................................................................................................. 172
Dokumentacja klasy....................................................................................................... 173
Dokumentacja metod..................................................................................................... 174
Dokumentacja pl skadowych....................................................................................... 174
Komentarze standardowe .............................................................................................. 174
Dokumentacja pakietu i podsumowanie ........................................................................ 176
Generowanie dokumentacji............................................................................................ 176
Porady dotyczce projektowania klas .................................................................................. 177

Rozdzia 5. Dziedziczenie.............................................................................................................. 181


Rozszerzanie klas................................................................................................................ 181
Hierarchie dziedziczenia................................................................................................. 188
Polimorfizm .................................................................................................................... 189
Wizanie dynamiczne..................................................................................................... 190
Zapobieganie dziedziczeniu klasy i metody finalne.................................................... 192
Rzutowanie .................................................................................................................... 193
Klasy abstrakcyjne......................................................................................................... 195
Dostp chroniony........................................................................................................... 200
Object uniwersalna nadklasa.......................................................................................... 201
Metody equals i toString ................................................................................................ 202
Programowanie uniwersalne .......................................................................................... 209
Klasa ArrayList............................................................................................................... 211
Klasy opakowa............................................................................................................. 217
Klasa Class ......................................................................................................................... 221

Java 2. Podstawy
Mechanizm odbicia.............................................................................................................. 224
Wykorzystanie mechanizmu odbicia do analizy moliwoci klas ..................................... 225
Wykorzystanie mechanizmu odbicia do analizy obiektw w czasie dziaania programu .. 229
Wykorzystanie mechanizmu odbicia w pisaniu kodu uniwersalnej tablicy ...................... 235
Wskaniki do metod ...................................................................................................... 238
Zastosowanie dziedziczenia w projektowaniu ...................................................................... 242

Rozdzia 6. Interfejsy i klasy wewntrzne ...................................................................................245


Interfejsy ............................................................................................................................. 246
Waciwoci interfejsw ................................................................................................. 250
Interfejsy i klasy abstrakcyjne........................................................................................ 251
Interfejsy i wywoania zwrotne........................................................................................ 252
Klonowanie obiektw........................................................................................................... 255
Klasy wewntrzne................................................................................................................ 260
Wykorzystanie klas wewntrznych do kontaktowania si ze zmiennymi obiektu ............ 262
Specjalne zasady skadni dla klas wewntrznych........................................................... 266
Czy klasy wewntrzne s uyteczne? Czy s w ogle potrzebne? I czy s bezpieczne?..... 266
Lokalne klasy wewntrzne ............................................................................................. 269
Statyczne klasy wewntrzne .......................................................................................... 274
Proxy ................................................................................................................................... 277
Waciwoci klas proxy .................................................................................................. 281

Rozdzia 7. Programowanie grafiki .............................................................................................283


Wprowadzenie do zestawu Swing................................................................................... 284
Tworzenie ramek ................................................................................................................. 287
Pozycjonowanie ramek ........................................................................................................ 290
Wywietlanie informacji w panelach .................................................................................... 295
Figury 2D ............................................................................................................................. 299
Kolory .................................................................................................................................. 307
Wypenianie figur geometrycznych.................................................................................. 310
Tekst i czcionki.................................................................................................................... 312
Obrazy ................................................................................................................................. 321

Rozdzia 8. Obsuga zdarze........................................................................................................329


Podstawy obsugi zdarze ................................................................................................... 330
Przykad obsuga kliknicia przycisku ........................................................................ 332
Wybr suchaczy zdarze ............................................................................................... 338
Przykad zmiana wygldu i wraenia ....................................................................... 341
Przykad przechwytywanie zdarze okna .................................................................... 344
Hierarchia zdarze AWT....................................................................................................... 347
Zdarzenia semantyczne i zdarzenia niskiego poziomu w AWT.............................................. 350
Mechanizm obsugi zdarze podsumowanie.............................................................. 350
Typy zdarze niskiego poziomu............................................................................................ 353
Aktywacja komponentw................................................................................................ 353
Zdarzenia dotyczce klawiatury...................................................................................... 355
Pochanianie zdarze ..................................................................................................... 361
Zdarzenia dotyczce myszki........................................................................................... 361
Dziaania ............................................................................................................................. 368
Multicasting......................................................................................................................... 377
Kolejka zdarze ................................................................................................................... 380
Doczanie wasnych zdarze......................................................................................... 381

Spis treci

Rozdzia 9. Komponenty Swing interfejsu uytkownika .................................................................391


Wzr projektu MVC .............................................................................................................. 392
Analiza MVC przyciskw zestawu Swing......................................................................... 396
Wprowadzenie do zarzdzania ukadem graficznym............................................................. 398
Ukad krawdzi............................................................................................................... 400
Panele ........................................................................................................................... 401
Wprowadzanie tekstu .......................................................................................................... 403
Pola tekstowe ................................................................................................................ 403
Walidacja danych ........................................................................................................... 409
Pola hase...................................................................................................................... 417
Obszary tekstowe .......................................................................................................... 418
Etykiety i komponenty etykiet......................................................................................... 421
Wybr tekstu.................................................................................................................. 423
Edycja tekstu ................................................................................................................. 424
Dokonywanie wyborw......................................................................................................... 426
Pola wyboru ................................................................................................................... 426
Przeczniki .................................................................................................................... 429
Krawdzie ...................................................................................................................... 433
Listy kombinowane ........................................................................................................ 437
Suwaki ........................................................................................................................... 440
Menu................................................................................................................................... 446
Tworzenie menu............................................................................................................. 446
Ikony elementw menu.................................................................................................. 449
Pola wyboru i przeczniki jako elementy menu ............................................................. 450
Menu kontekstowe ........................................................................................................ 452
Mnemoniki i akceleratory............................................................................................... 453
Wczanie i wyczanie elementw menu....................................................................... 455
Paski narzdzi................................................................................................................ 459
Podpowiedzi................................................................................................................... 461
Zaawansowane techniki zarzdzania ukadem graficznym................................................... 464
Ukad siatkowy............................................................................................................... 467
Ukad pudekowy............................................................................................................ 471
Ukad arkuszowy ............................................................................................................ 476
Parametry gridx, gridy, gridweight oraz gridheight .......................................................... 478
Pola wagowe.................................................................................................................. 478
Parametry fill i anchor.................................................................................................... 478
Poszycie......................................................................................................................... 479
Alternatywna metoda okrelania parametrw gridx, gridy, gridwidth i gridheight............ 479
Praca bez menedera ukadu......................................................................................... 483
Tworzenie wasnych menederw ukadu ....................................................................... 483
Sekwencja dostpu........................................................................................................ 487
Okna dialogowe................................................................................................................... 489
Okna wyboru .................................................................................................................. 490
Tworzenie okien dialogowych ......................................................................................... 501
Przesyanie danych ........................................................................................................ 505
Okno pliku...................................................................................................................... 511
Okno wyboru koloru ....................................................................................................... 522

Rozdzia 10. Aplety.......................................................................................................................529


Podstawy apletw................................................................................................................ 529
Prosty aplet ................................................................................................................... 532
Uruchamianie przegldarki apletw ............................................................................... 534

Java 2. Podstawy
Ogldanie apletu w przegldarce ................................................................................... 535
Przeksztacanie aplikacji w aplety .................................................................................. 539
Cykl ycia apletu ............................................................................................................ 540
Podstawy systemu ochrony............................................................................................ 542
Okna dialogowe w apletach ........................................................................................... 543
Znaczniki HTML oraz atrybuty apletw................................................................................. 545
Atrybuty okrelajce pooenie apletu............................................................................ 546
Atrybuty dotyczce kodu apletu...................................................................................... 547
Atrybuty dotyczce przegldarek nie poczonych z Jav................................................ 550
Znacznik OBJECT ........................................................................................................... 550
Znaczniki Java Plug-In .................................................................................................... 551
Przekazywanie informacji apletom ................................................................................. 552
Multimedia .......................................................................................................................... 557
Adresy URL .................................................................................................................... 558
Tworzenie plikw multimedialnych ................................................................................. 559
Kontekst apletu................................................................................................................... 560
Komunikacja pomidzy apletami.................................................................................... 560
Wywietlanie elementw w przegldarce ....................................................................... 561
Aplet Spis adresw..................................................................................................... 563
To aplet. Nie, to aplikacja. To jedno i to samo!.............................................................. 565
Pliki JAR............................................................................................................................... 570
Manifest ........................................................................................................................ 572
Przechowywanie plikw JAR ........................................................................................... 573
Autonomiczne pliki JAR .................................................................................................. 574
Zasoby........................................................................................................................... 574
Pakiety opcjonalne......................................................................................................... 578
Piecztowanie................................................................................................................ 579

Rozdzia 11. Wyjtki i proces debugowania....................................................................................581


Obsuga bdw................................................................................................................... 582
Klasyfikacja wyjtkw .................................................................................................... 583
Powiadamianie o wyjtkach zwracanych przez metody................................................... 585
Jak wygenerowa wyjtek?............................................................................................. 587
Tworzenie klas wyjtkw ................................................................................................ 588
apanie wyjtkw ................................................................................................................ 589
Wielokrotne apanie wyjtkw ........................................................................................ 591
Powtrne zwracanie tego samego wyjtku ..................................................................... 592
Jeszcze jedno spojrzenie na obsug bdw i wyjtkw ................................................ 595
Wskazwki dotyczce korzystania z wyjtkw...................................................................... 599
Techniki debugowania ......................................................................................................... 602
Metody debugowania ..................................................................................................... 602
Stwierdzenia .................................................................................................................. 606
Korzystanie z okna konsoli ............................................................................................ 609
ledzenie zdarze AWT .................................................................................................. 610
Robot AWT ..................................................................................................................... 614
Profilowanie ................................................................................................................... 618
Test wykorzystania......................................................................................................... 622
Korzystanie z debuggera ..................................................................................................... 623
Debugger JDB ................................................................................................................ 623
Debugger Forte .............................................................................................................. 628

Spis treci

Rozdzia 12. Strumienie i pliki........................................................................................................631


Strumienie........................................................................................................................... 631
Wczytywanie i zapisywanie bajtw.................................................................................. 632
Zoo pene strumieni ............................................................................................................ 634
Budowa filtrw strumieni ............................................................................................... 637
Strumienie danych ......................................................................................................... 640
Strumienie plikw swobodnego dostpu........................................................................ 643
Strumienie plikw ZIP.......................................................................................................... 653
Wykorzystanie strumieni...................................................................................................... 660
Zapisywanie separowanego tekstu ................................................................................ 661
Klasa StringTokenizer oraz tekst separowany................................................................ 662
Pobieranie separowanego tekstu................................................................................... 663
Strumienie swobodnego dostpu................................................................................... 666
Strumienie obiektw............................................................................................................ 673
Przechowywanie obiektw zmiennego typu .................................................................... 674
Format pliku serializacji obiektw .................................................................................. 678
Problem zapisywania referencji obiektw....................................................................... 682
Format referencji obiektw ............................................................................................ 688
Ochrona ......................................................................................................................... 690
Wersje ........................................................................................................................... 695
Serializacja w roli klonowania ........................................................................................ 697
Zarzdzanie plikami............................................................................................................. 700

Dodatek A Sowa kluczowe Javy..................................................................................................707


Skorowidz..................................................................................................................................709

10

Aplety
W tym rozdziale:


podstawy apletw,

znaczniki HTML oraz atrybuty apletw,

multimedia,

kontekst apletu,

pliki JAR.

W poprzednich rozdziaach poznae ju wikszo narzdzi Javy, znasz te podstawy programowania graficznego w tym jzyku. Mamy nadziej, e podobnie jak my uwaasz, i
Java jest dobrym (jeli nie doskonaym) zorientowanym obiektowo jzykiem oglnego przeznaczenia, a biblioteki interfejsu uytkownika Swing s elastyczne i uyteczne. To wane zalety,
ale to nie one s powodem caego tego zamieszania wok Javy. Niesamowity zamt, jaki
powsta w czasie pierwszych kilku lat istnienia Javy (wspominalimy o tym w rozdziale 1.)
wynika z faktu, i Java jest zdolna do oywienia Internetu. Moesz tworzy specjalne
programy Javy (nazywane apletami), ktre mog by pobierane z Internetu i uruchamiane
przez przegldarki internetowe poczone z Jav. W tym rozdziale nauczysz si pisa podstawowe aplety. Profesjonalizm apletw zaley od stopnia opanowania przez programist
mechanizmu wielowtkowoci oraz programowania sieciowego w Javie. S to bardziej skomplikowane tematy, ktre poruszymy w ksice Java 2. Techniki zaawansowane.
Nowoczesne przegldarki internetowe obsuguj Dynamic HTML oraz jzyki skryptowe,
co sprawia, e potrafi duo wicej ni w chwili, gdy na rynku pojawia si platforma Javy.
Wci jednak aplety napisane w prawdziwym jzyku programowania maj wiksze moliwoci ni jakakolwiek kombinacja jzykw HTML, XML i jzykw skryptowych.

Podstawy apletw
Do tej pory uywae jzyka HTML (ang. hypertext markup language hipertekstowy jzyk
znacznikw) do opisywania ukadu graficznego stron internetowych. HTML to proste narzdzie suce do oznaczania elementw hipertekstu. Dla przykadu,  oznacza tytu

530

Java 2. Podstawy
strony, a wic kady tekst, ktry znajdzie si za tym znacznikiem, zostanie potraktowany
jak tytu danej strony. Koniec tytuu oznaczasz napisem  (jest to jedna z podstawowych
zasad znacznikw znak , wraz z nastpujc po nim nazw, oznacza koniec elementu).
Podstawowa zasada umieszczania apletw na stronach internetowych jest prosta strona
HTML musi poinformowa przegldark, jakie aplety powinny zosta zaadowane, a nastpnie
gdzie na stronie powinny si one znale. Jak moge tego oczekiwa, znacznik, ktrego musisz
uy, powinien informowa przegldark o tym:


skd pobiera pliki klas,

jak wywietli aplet na stronie (rozmiar apletu, pooenie itd.).

Jednym ze sposobw umieszczania apletw na stronach internetowych jest uycie


znacznika   oraz parametrw przekazujcych opisane powyej informacje. Konsorcjum W3 zaproponowao zmian znacznika na bardziej uniwersaln nazw
 ,
a znacznik   zosta zanegowany przez specyfikacj HTML 4.0. Najnowsze przegldarki rozpoznaj obydwa znaczniki, ale musisz pamita, e ich starsze wersje znaj
wycznie  . W dalszej czci tego rozdziau omwimy znaczniki HTML dotyczce
apletw.

Nastpnie przegldarka ciga pliki klas z Internetu (lub z odpowiedniego katalogu na maszynie uytkownika) i uruchamia aplet przy uyciu wirtualnej maszyny Javy.
Oprcz apletu strona internetowa moe zawiera wiele innych elementw HTML, z ktrymi
na pewno ju si spotkae: czcionki, listy, grafik, linki i tak dalej. Aplety to tylko jedna z wielu
koncepcji hipertekstu. Warto zdawa sobie spraw z faktu, e jzyk programowania Java nie
jest narzdziem sucym do projektowania stron HTML jest narzdziem oywiajcym te
strony. Nie oznacza to, e elementy projektu GUI w aplecie Javy nie s wane, ale musz one
wsppracowa i w gruncie rzeczy podlega projektowi HTML, w ktrym s uruchamiane.
W niniejszej ksice nie omawiamy znacznikw; zakadamy, e znasz lub wsppracujesz z kim, kto zna podstawy jzyka HTML. Do uruchomienia apletw Javy wymagana jest znajomo zaledwie kilku z nich. Oczywicie, w dalszej czci tego rozdziau zapoznamy Ci z nimi. Z nauk jzyka HTML nie ma najmniejszego problemu
w najbliszej ksigarni znajdziesz dziesitki ksiek powiconych temu jzykowi. Jedn
z tych, ktre przekazuj wszelkie potrzebne informacje, nie obraajc przy tym Twojej
inteligencji, jest HTML i XHTML. Przewodnik encyklopedyczny, autorstwa Chucka Musciano i Billa Kennedy'ego, wydawnictwa Helion.

W czasie powstania apletw jedyn obsugujc je przegldark bya HotJava firmy Sun.
Oczywicie, niewielu uytkownikw miao ochot uywa osobnej przegldarki tylko po
to, by mc cieszy si nowymi zabawkami. Aplety Javy stay si naprawd popularne, gdy
Netscape doczy obsug Javy do swojej przegldarki. Wkrtce to samo stao si z Internet
Explorerem. Niestety, producenci przegldarek internetowych pozostali daleko w tyle za Jav.
Na szczcie i Netscape, i Internet Explorer obsuguj Jav 1.0, a ich nowsze wersje radz
sobie z wikszoci narzdzi Javy 1.1.
Mimo to musimy podkreli, e obsuga apletw wie si z denerwujcymi ograniczeniami
i niezgodnoci. Dla przykadu, Microsoft prawdopodobnie nigdy nie zaimplementuje tych
elementw Javy, ktre uwaa za konkurencyjne wzgldem jego wasnej technologii. Netscape

Rozdzia 10.

Aplety

531

w zasadzie straci ju zainteresowanie maszynami wirtualnymi. Netscape 6 pozwala uytkownikom podczy do przegldarki ich wasn maszyn wirtualn, ale np. Netscape 4 nie
posiada takiej moliwoci. Wszystko to utrudnia tworzenie apletw korzystajcych z nowych
waciwoci Javy, a przy tym dziaajcych na rnych przegldarkach.
Aby przezwyciy ten problem, Sun udostpni narzdzie o nazwie Java Plug-In (pocztkowo nosio ono nazw Activator). Korzystajc z mechanizmw rozszerzania aplikacji,
obsugiwanych przez przegldarki Internet Explorer i Netscape Navigator, Java Plug-In podcza si do obydwu przegldarek i umoliwia im uruchamianie apletw Javy przy uyciu zewntrznego Java Runtime Environment (rodowiska wykonawczego Javy), dostarczanego
przez firm Sun. Wszystko na to wskazuje, e JRE zawsze bdzie uywa najnowszej wersji
maszyny wirtualnej, dziki czemu zawsze bdziesz mg korzysta z najnowszych i najwspanialszych osigni jzyka Java.
Gdy ju zainstalujesz Java Plug-In, bdziesz mg wybra odpowiadajc Ci wersj maszyny
wirtualnej Javy. Aby uruchamia aplety zamieszczone w tej ksice, musisz zainstalowa Java
Plug-In i wybra maszyn Java 1.3 (patrz rysunek 10.1).
Rysunek 10.1.
Wybr maszyny
wirtualnej Javy
w oknie Java Plug-In

Oczywicie, jeeli projektujesz stron internetow dla szerokiego grona odbiorcw, wymaganie, aby kady uytkownik Twojej strony zainstalowa Java Plug-In, w ogle nie wchodzi
w gr, poniewa pobieranie go zajmuje troch czasu. W takim wypadku musisz zaprojektowa
aplety, ktre bd dziaa z maszyn wirtualn Javy wbudowan w Netscape Navigatora lub
w Internet Explorera. Najlepiej jest trzyma si narzdzi Java 1.0 i tak bardzo uproci aplet,
jak to tylko moliwe. Jednak, szczerze mwic, jeeli Twj aplet ma by tak prosty, to
prawdopodobnie moesz si w ogle oby bez niego w algorytmach moesz uywa JavaScriptu, przekazywa dane za pomoc formularzy, a w animacjach uywa animowanych
plikw GIF. Nastpnie cay program umieszczasz na serwerze, najlepiej na serwerze obsugujcym oparte na Javie strony internetowe oraz serwlety.
Z drugiej strony, jeeli piszesz bardzo skomplikowany program, zastanw si, czy wykorzystanie przegldarki internetowej do uruchamiania go niesie ze sob jakiekolwiek korzyci.
Jeeli nie, moesz po prostu udostpni aplikacj Javy, ktr uytkownik bdzie mg cign i uruchomi na swoim komputerze. Wci bdziesz korzysta ze wszystkich osigni
Javy, takich jak niezaleno od platformy, zarzdzanie ochron danych oraz prosty dostp do

532

Java 2. Podstawy
sieci i baz danych. Oczywicie, korzystanie z przegldarki take ma swoje zalety. Uytkownikowi
zazwyczaj atwiej jest zlokalizowa aplikacj na stronie internetowej ni w lokalnym systemie plikw (aplikacj atwo zgubi, jeeli nie korzystamy z niej na co dzie). Z kolei administratorowi atwiej jest aktualizowa aplikacj na stronie internetowej ni wysya poprawki i udoskonalenia wszystkim zainteresowanym.
Programami Javy, ktre odniosy najwikszy sukces, s aplikacje intranetowe penice
funkcj interfejsw dla systemw informacyjnych. Dla przykadu, wiele firm zainwestowao
w programy obliczajce zwrot kosztw, wynajdujce potencjalnie korzystne transakcje, planujce harmonogramy i dni wolne od pracy, obsugujce wydawanie zlece i tak dalej. Programy
te s relatywnie mae, potrzebuj kontaktu z bazami danych i elastycznoci, jak zapewniaj
formularze stron internetowych, oraz musz by dostosowane do wymaga danej korporacji.
Aplety s wic dla nich doskonaym narzdziem. A poniewa liczba uytkownikw jest ograniczona, nie ma problemu z dystrybucj Java Plug-In.
Zalecamy, aby dla swoich aplikacji sieciowych wybra jedno z nastpujcych rozwiza:
1. Jeeli pracujesz w intranecie, uywaj Java Plug-In do obsugi apletw Javy. Pozwoli

Ci to na maksymaln kontrol nad platform Javy, zmniejszy bl gowy spowodowany


przenonoci oraz da moliwo korzystania z najbardziej zaawansowanych narzdzi
Javy. Oczywicie, w takim wypadku musisz zadba o instalacj Java Plug-In na
komputerach uytkownikw.
2. Jeeli nie pracujesz w intranecie, nie uywaj apletw. Przy obliczeniach korzystaj

z jzykw skryptowych; przy animacji z animowanych plikw GIF; przy


wpisywaniu danych z formularzy oraz z przetwarzania danych po stronie serwera.

Prosty aplet
Aby zadouczyni tradycji, pierwszym apletem, jaki napiszemy, bdzie .
Zanim to zrobimy, musimy podkreli, e z punktu widzenia programisty aplety nie s niczym
nowym. Aplet to po prostu klasa Javy rozszerzajca (koniecznie) klas .
Zwr uwag, e pakiet  nie jest czci pakietu AWT, mimo i aplet jest
komponentem AWT, co wida na rysunku 10.2 przedstawiajcym hierarchi dziedziczenia.
W naszej ksice do implementacji apletw bdziemy uywa zestawu Swing. Jak moesz
si przekona, spogldajc na rysunek 10.2,  jest bezporedni podklas klasy .
Jeeli Twj aplet zawiera komponenty Swing, musisz rozszerzy klas . Komponenty Swing znajdujce si wewntrz samej klasy  nie zostan prawidowo
przerysowane.

Hierarchia dziedziczenia (rysunek 10.2) niesie ze sob pewne oczywiste, lecz mimo to
uyteczne konsekwencje. Na przykad, poniewa aplety s komponentami AWT, obsuga
zdarze w apletach dziaa dokadnie tak samo, jak omawiana w rozdziale 8. obsuga zdarze
aplikacji.
Listing 10.1 zawiera kod apletu Nie Witaj wiecie.

Rozdzia 10.

Aplety

533

Rysunek 10.2.
Hierarchia
dziedziczenia apletu

Listing 10.1. NieWitajSwiecieAplet.java


 
 
 
 

 
    !
"#
$   %&
'#
()  *  + )  , %&
-!.  /0 + !. %12
   3
45 314
6 )  )7278&
 *   % /0 &
9
9

Zauwa, jak bardzo ten kod przypomina odpowiadajcy mu program z rozdziau 7. Jednake,
poniewa aplet znajduje si wewntrz strony internetowej, nie trzeba okrela, w jaki sposb
program koczy swoje dziaanie.

534

Java 2. Podstawy

Uruchamianie przegldarki apletw


Aby uruchomi aplet, wykonaj nastpujce czynnoci:
1. Skompiluj pliki rdowe w pliki klas.
2. Utwrz plik HTML, ktry poinformuje przegldark, ktry plik klasy ma zaadowa

jako pierwszy oraz w jaki sposb ma wywietli aplet.


Zazwyczaj (ale niekoniecznie) nadajesz plikowi HTML tak sam nazw, jak nosi odpowiadajca mu nazwa pliku klasy. Tak wic, zgodnie z tradycj, nazwiemy nasz plik NieWitajSwiecieAplet.html. Oto zawarto tego pliku:
:,,.72);<7+1
   1=<2>+66>7=?>2+66@
:A,,.72@

Przed uruchomieniem apletu w przegldarce powiniene przetestowa go za pomoc programu


appletviewer, ktry jest czci Java SDK. Aby uy przegldarki apletw w naszym przykadowym programie, wpisz w linii polece
  
  B 

Plikiem przetwarzanym przez przegldark apletw jest plik HTML, a nie plik klasy. Rysunek
10.3 przedstawia przegldark apletw wywietlajc powyszy aplet.
Rysunek 10.3.
Aplet uruchamiany
przez przegldark
apletw

Moesz rwnie uruchamia aplety za pomoc swojego edytora lub rodowiska programistycznego. W systemie Emacs wybierz z menu JDE/Run Applet. Uywajc programu
Textpad, wybierz Tools/Run Java Applet lub uyj skrtu klawiaturowego CTRL+3. Zostanie wywietlone okno dialogowe prezentujce wszystkie pliki HTML znajdujce si
w aktualnym katalogu. Jeeli naciniesz klawisz ESC, Textpad automatycznie utworzy
najmniejszy moliwy plik HTML. W systemie Forte po prostu zaaduj stron HTML zawierajc znacznik apletu. Forte obsuguje prost przegldark, prezentujc dziaanie
apletu wewntrz strony internetowej. Moesz rwnie klikn prawym klawiszem myszki
plik rdowy i w zakadce Execution zmieni warto Executor na Applet Execution.
Dziki poniszej sztuczce moesz unikn tworzenia dodatkowych plikw HTML. Docz
znacznik apletu do pliku rdowego jako komentarz:
A
:,,.72);<7+1C
  1=<2>+66>7=?>2+66@
:A,,.72@
A
 C
   !


Rozdzia 10.

Aplety

535

Nastpnie uruchom przegldark apletw, jako parametr w linii polece podajc plik
rdowy:
  C
 

Nie polecamy tej procedury, ale moe ona okaza si pomocna, jeli zaley Ci na zminimalizowaniu liczby plikw, o ktre musisz si martwi w czasie testowania programu.

Przegldarka apletw przydaje si podczas wstpnych testw, ale w pewnym momencie bdziesz
zmuszony uruchomi swoje aplety w przegldarce internetowej, aby zobaczy je w ten sam
sposb, w jaki bdzie je oglda uytkownik. Program przegldarki apletw pokazuje wycznie
aplet, pomijajc otaczajcy go tekst HTML. Jeeli plik HTML zawiera kilka apletw, przegldarka apletw wywietli po prostu kilka okienek.

Ogldanie apletu w przegldarce


Jeeli posiadasz przegldark obsugujc Java 2, tak jak Netscape 6 lub Opera, wystarczy
otworzy w niej plik HTML. Jednake aby uruchomi aplet w Internet Explorerze lub Netscape 4,
musisz zainstalowa w przegldarce Java Plug-In i skonwertowa plik HTML tak, aby wywoywa ten program.
Jeeli zainstalowae Java 2 SDK, Java Plug-In zosta zainstalowany automatycznie. Jednake
jeeli chcesz zainstalowa Java Plug-In osobno, moesz go pobra z witryny http://java.sun.com/
products/plugin.
Gdy ju zainstalujesz SDK lub Java Plug-In, wywoaj Panel sterowania Java Plug-In
(patrz rysunek 10.4). Jeli uywasz Windows, przejd do panelu sterowania Windows
(Start/Ustawienia/Panel sterowania) i kliknij dwukrotnie ikon Java Plug-In. Jeeli uywasz Solaris, wpisz polecenie

   

lub zaaduj stron


DA  A
A) , B 

Nastpnie zaznacz pole Show Java Console. Dziki temu za kadym razem, gdy uruchomisz Java Plug-In, pojawi si okno konsoli (patrz rysunek 10.5). Okno konsoli jest
bardzo pomocne przy wywietlaniu komunikatw o bdach.
Rysunek 10.4.
Panel sterowania
Java Plug-In

536

Java 2. Podstawy

Rysunek 10.5.
Konsola Javy

Niestety, znaczniki HTML, ktrych musisz uywa, wywoujc Java Plug-In, s do nieporczne. Zamiast pisa je wasnorcznie, atwiej bdzie Ci uruchomi konwerter HTML, dostarczany w tym celu przez firm Sun (patrz rysunek 10.6). Moesz go cign z http://java.sun.com/
products/plugin1.3/converter.html. Rozpakuj plik, np. do /usr/local/jdk/converter lub c:\jdk\
converter.
Rysunek 10.6.
Konwerter HTML
Java Plug-In

Konwerter, na podstawie prostego pliku HTML zawierajcego tradycyjny znacznik  ,


tworzy skomplikowany kod HTML, wymagany przez rne przegldarki do uruchomienia
Java Plug-In.
Zanim rozpoczniesz, utwrz katalog plugin i skopiuj do niego swj plik lub pliki HTML.
Moesz uruchomi konwerter HTML w nastpujcy sposb: przejd do katalogu plugin i wydaj
nastpujce polecenie:

E  BAA A


0A  A >2C.)  

lub

E  BFG


0G  G >2C.)  

Rozdzia 10.

Aplety

537

Domylnie konwerter wywietla graficzny interfejs uytkownika (patrz rysunek 10.6). Moesz
uywa tego programu do konwersji wszystkich plikw w danym katalogu. Jeeli wywoasz
program z katalogu plugin, wszystkie dane wejciowe zostan wpisane automatycznie i bdziesz
mg po prostu klikn przycisk Convert.
Moesz rwnie skorzysta z jzyka skryptowego lub pliku wsadowego, umieszczajc go
w katalogu jdk/converter/classes, ale w takim wypadku musisz wasnorcznie okreli katalog
plikw HTML.
Dla przykadu, w przypadku  zaczynamy od nastpujcego prostego
kodu HTML:
:,,.72);<7+1C
  1=<2>+66>7=?>2+66@
:A,,.72@

Wynik konwersji jest zawarty w listingu 10.2. Znaczniki tego kodu wyjanimy w dalszej
czci rozdziau.
Listing 10.2. NieWitajSwiecieApletPlugin.html
:HEE1);I7827<J,,.721EE@
:HEE);I78278I78=;EE@
:;K!7)2  +1 F(<-)(6E67E<EK7-E66(6"L--<-1
=<2>+66>7=?>2+66  +1B FAA
A  AAA

 EE  MI+446461@
":,8CC7+);<7I.N7+1
   1@
$:,8CC7+1 /1I.N7+1  AE
E   +1@
':,8CC7+1 1I.N7+1O 1@
(:);CC72@
-:7CK7< /+1  AE
E   +1
);<7+1
   1=<2>+66>7=?>2+66 +O 
 +1B FAA
A  AAA
E B 1@:;7CK7<@:A);CC72@
6:A;7CK7<@:A7CK7<@
:A;K!7)2@
:HEE
:,,.72);<7+1
   1=<2>+66>7=?>2+66@
:A,,.72@
"EE@
$:HEE17<J);I7827<J,,.721EE@

Jeli wolisz korzysta z linii polece, moesz po prostu wpisa ciek dostpu do pliku lub
plikw, ktre powinny zosta skonwertowane, np.:

E  BAA A


0A  A >2C.)  B 

lub

E  BFG


0G  G >2C.)  C
 B 

Konwerter uywajcy linii polece skonwertuje i utworzy pliki zapasowe w ten sam sposb,
w jaki wywietla okno dialogowe.
Domylnie konwerter produkuje pliki HTML, ktre dziaaj zarwno w przegldarce Internet Explorer, jak i w Netscape Navigator. Istniej jednak inne sposoby konwersji jeli
chcesz dowiedzie si wicej, zajrzyj do dokumentacji konwertera.

538

Java 2. Podstawy
Konwerter zamienia zawarto wszystkich plikw w danym katalogu, a stare wersje kopiuje
do katalogu katzrodlowy_BAK. Dla przykadu, jeeli umiecie oryginalne pliki w katalogu
plugin, zostan one zastpione plikami skonwertowanymi, a oryginay zostan skopiowane
do plugin_BAK.
Nie podoba nam si ten rodzaj konwersji nawet jeeli konwerter zachowuje oryginalne
pliki. Zazwyczaj wygodnie jest mie pod rk zarwno oryginalny, jak i skonwertowany plik.
Zalecamy nastpujc procedur:
1. Skopiuj pliki do katalogu tymczasowego.
2. Uruchom konwerter.
3. Zmie nazwy skonwertowanych plikw na co w rodzaju MojApletPlugin.html.
4. Przenie pliki z powrotem do oryginalnego katalogu.

Gdy ju skonwertujesz pliki, moesz uruchomi aplet w przegldarce. Po prostu zaaduj


skonwertowany plik HTML do swojej przegldarki internetowej. O ile Java Plug-In zosta
prawidowo zainstalowany, na ekranie pojawi si aplet (patrz rysunek 10.7). Jeeli Java
Plug-In nie zosta zainstalowany, Twoja przegldarka powinna przeprowadzi Ci przez proces
jego pobierania i instalacji.
Rysunek 10.7.
Ogldanie apletu
w przegldarce

Testowanie apletw korzystajcych z Java Plug-In jest troch bolesne, poniewa musisz uruchamia swoje pliki HTML przy uyciu konwertera. Jeeli uywasz Netscape 4,
moesz zaoszczdzi sobie troch pracy, pod warunkiem jednak, e Twoje aplety nie
korzystaj z adnych narzdzi Java 2 oprcz zestawu Swing (wszystkie aplety w tym
rozdziale speniaj ten warunek). cignij z witryny http://java.sun.com/products/jfc/
#download-swing dodatek do zestawu Swing. Umie plik swing.jar w katalogu Netscape\
Communicator\Program\Java\Classes. Teraz Netscape 4 bdzie w stanie uruchamia
aplety korzystajce z zestawu Swing wystarczy, e zaadujesz prosty plik HTML zawierajcy znacznik  . Konwersja na znaczniki   nie bdzie ju potrzebna.
W przypadku Internet Explorera procedura jest podobna, lecz bardziej skomplikowana.
Szczegy znajdziesz pod adresem http://java.sun.com/products/jfc/tsc/articles/
applets/index.html.

Rozdzia 10.

Aplety

539

Przeksztacanie aplikacji w aplety


Konwersja aplikacji graficznej (czyli aplikacji korzystajcej z AWT, ktr moesz uruchomi przy uyciu interpretera ) na aplet, ktry moesz umieci na stronie internetowej,
jest do prostym zadaniem. W gruncie rzeczy, cay kod interfejsu uytkownika pozostaje
bez zmian.
Oto procedura, ktr musisz wykona, aby przeksztaci aplikacj w aplet:
1. Napisz stron HTML zawierajc odpowiedni znacznik adujcy kod apletu.
2. Utwrz podklas klasy . Nowa klasa musi by opatrzona sowem  !.

W przeciwnym wypadku aplet nie zaaduje si.


3. Wytnij ze swojej aplikacji metod ". Nie buduj ramki dla aplikacji. Twj program

zostanie wywietlony wewntrz przegldarki internetowej.


4. Przenie kod inicjalizacyjny z konstruktora ramki do metody " apletu. Nie musisz

wasnorcznie tworzy obiektu apletu przegldarka sama utworzy instancj


i uruchomi metod ".
5. Usu wywoanie #$; rozmiar apletu jest okrelany przez parametry %
i %&% pliku HTML.
6. Usu wywoanie #'  (#
)(". Aplet nie moe zosta zamknity;

koczy dziaanie, gdy uytkownik wycza przegldark.


7. Jeeli aplikacja wywouje metod #, usu to wywoanie. Aplety nie posiadaj

paskw tytuowych (moesz, oczywicie, nada tytu samej stronie internetowej,


uywajc znacznika ).
8. Nie wywouj metody #(. Aplety s wywietlane automatycznie.

W celach wiczeniowych przeksztacimy w aplet program kalkulatora z rozdziau 9. Na rysunku


10.8 moesz zobaczy, jak wyglda kalkulator uruchamiany w przegldarce.
Rysunek 10.8.
Aplet kalkulatora

540

Java 2. Podstawy
Listing 10.3 zawiera stron HTML. Zwr uwag, e oprcz znacznikw apletu znajduje si
w nim take pewien tekst.

Listing 10.3. Kalkulator.html (przed skonwertowaniem go przy uyciu konwertera HTML)


:>2C.@
:2=2.7@P 0 :A2=2.7@
:K;<Q@
; 0 0 4  / 0 //5RST UV S 
":,,.72);<7+1 P 0   1=<2>+(6>7=?>2+(6@
$:A,,.72@
':AK;<Q@
(:A>2C.@

Listing 10.4 zawiera kod apletu. Zbudowalimy podklas klasy , umiecilimy kod
inicjalizacyjny w metodzie " oraz usunlimy wywoania #, #$, #' *
(#
)(" i #(. Klasa "+, () nie ulega adnym zmianom, wic jej kod
zosta pominity.
Listing 10.4. ApletKalkulatora.java
 
 
 
 

  P 0    !
"#
$   %&
'#
()  *  + )  , %&
-, P 0   + , P 0  %&
6 *   % &
9
9

 
 (-."/0.wywoywana,

gdy aplet jest wczytywany po raz pierwszy. Przeaduj


t metod i umie w niej kod inicjalizacyjny.

 (-.#$/".#$)(,(#1.".2#(,(#0.wymusza

zmian rozmiaru apletu.


Byaby to wietna metoda, gdyby tylko dziaaa; niestety, obecne przegldarki
internetowe nie obsuguj jej, poniewa powoduje ona zmiany w ukadzie graficznym
strony. Mona jej natomiast uywa w przegldarce apletw i cakiem moliwe,
e przysze przegldarki bd j obsugiwa, odwieajc stron internetow za
kadym razem, gdy zmieni si rozmiar apletu.

Cykl ycia apletu


W klasie  znajduj si cztery metody, za pomoc ktrych budujesz struktur kadego
powanego apletu: ", #), #( oraz -#)(2. Poniej znajduje si krtki opis kadej
z tych metod.

Rozdzia 10.

Aplety

 "

Ta metoda jest uywana do inicjalizacji danych wymaganych przez aplet. Dziaa


mniej wicej jak konstruktor system wywouje j, gdy Java uruchamia aplet po
raz pierwszy. Zazwyczaj suy ona przetwarzaniu wartoci przekazywanych przez
znacznik 3, a take tworzeniu komponentw interfejsu uytkownika.
Aplety mog posiada domylny konstruktor, ale zazwyczaj caa inicjalizacja
odbywa si w metodzie ".
 #)

Ta metoda jest wywoywana automatycznie po metodzie ". Jest rwnie


wywoywana za kadym razem, gdy uytkownik powrci do strony zawierajcej
dany aplet, jeeli wczeniej opuci j, adujc inn stron. Oznacza to, e metoda
#) moe by uruchomiona wielokrotnie, w przeciwiestwie do metody ".
Tak wic kod, ktry powinien by wykonywany tylko raz, zamieszczaj w metodzie
", nie w metodzie #). W metodzie #) zazwyczaj znajduje si kod restartujcy
wtek apletu, czyli np. ponownie rozpoczynajcy animacj. Jeeli Twj aplet nie
wykonuje dziaa, ktre powinny zosta zatrzymane, gdy uytkownik opuszcza stron,
nie musisz implementowa tej metody (ani metody #().
 #(

Ta metoda jest wywoywana automatycznie, gdy uytkownik opuszcza stron,


na ktrej znajduje si aplet. Dlatego te moe by wielokrotnie wywoana dla tego
samego apletu. Dziki niej moesz zatrzyma czasochonny algorytm, aby nie
spowalnia pracy systemu operacyjnego, gdy uytkownik nie zwraca uwagi na aplet.
Nie powiniene wywoywa tej metody bezporednio. Jeeli Twj aplet nie obsuguje
animacji, plikw dwikowych czy skomplikowanych oblicze, metoda #(
zazwyczaj nie jest do niczego potrzebna.
 -#)(2

Java gwarantuje wywoanie tej metody, gdy przegldarka internetowa zostanie


wyczona w standardowy sposb. Poniewa rodowiskiem apletw jest strona
HTML, nie musisz zawraca sobie gowy usuwaniem panelu. Gdy przegldarka
zostanie wyczona, Java dokona tego automatycznie. Tym, co musisz umieci
w metodzie -#)(2, jest kod zwalniajcy zasoby niezalene od pamici, takie jak
konteksty graficzne, ktrych uywa aplet. Oczywicie, jeeli aplet jest aktywny,
przed wywoaniem metody -#)(2 zostanie wywoana metoda #(.

 
 (-.#)/0.przeaduj

t metod, umieszczajc w niej kod, ktry powinien zosta


wykonany za kadym razem, gdy uytkownik odwiedzi stron zawierajc aplet.
Typowym zadaniem tej metody jest reaktywacja wtku.

 (-.#(/0.przeaduj

t metod, umieszczajc w niej kod, ktry powinien zosta


wykonany za kadym razem, gdy uytkownik opuci stron zawierajc aplet.
Typowym zadaniem tej metody jest zawieszenie dziaania wtku.

 (-.-#)(2/0.przeaduj

t metod, umieszczajc w niej kod, ktry powinien


zosta wykonany, gdy uytkownik wycza przegldark. Typowym zadaniem tej
metody jest wywoanie metody -#)(2 dla obiektw systemowych.

541

542

Java 2. Podstawy

Podstawy systemu ochrony


Poniewa aplety zostay zaprojektowane tak, aby mogy by pobierane z odlegych serwerw,
a nastpnie wykonywane lokalnie, bardzo wane s wzgldy bezpieczestwa. Jeeli uytkownik
wczy w swojej przegldarce obsug Javy, przegldarka bdzie ciga kod apletw ze stron
HTML i natychmiast go uruchamia. Uytkownik nie jest w stanie potwierdzi lub zatrzyma
operacji wykonywanych przez konkretny aplet. W zwizku z tym na aplety (w przeciwiestwie do aplikacji) zostay naoone pewne ograniczenia. Meneder ochrony apletw zwraca
 )24(" (wyjtek ochrony) za kadym razem, gdy aplet prbuje naruszy jedn
z regu dostpu (aby dowiedzie si wicej o menederach ochrony, zajrzyj do Java 2. Techniki zaawansowane).
Jakie dziaania mog podejmowa aplety na wszystkich platformach? Mog wywietla obrazy
i wydawa sygnay dwikowe, pobiera nacinicia klawiszy i kliknicia myszki oraz wysya
wpisane przez uytkownika dane z powrotem na serwer. To wystarcza, aby prezentowa informacje i rysunki, a take pobiera polecenia od uytkownika. rodowisko ograniczonego
wykonywania apletw czsto nazywane jest piaskownic. Aplety bawice si w piaskownicy nie mog wpywa na system operacyjny uytkownika ani szpiegowa go. W tym rozdziale
bdziemy zajmowa si wycznie apletami dziaajcymi w piaskownicy.
W szczeglnoci, aplety bawice si w piaskownicy:


nie mog uruchamia programw na komputerze uytkownika;

nie mog komunikowa si z serwerem innym ni ten, z ktrego zostay cignite;


serwer ten jest nazywany serwerem inicjujcym (ang. originating host). Ta zasada
jest czsto okrelana sowami aplety mog dzwoni wycznie do domu. Dziki
temu uytkownicy s chronieni przed apletami, ktre mogyby szpiegowa w zasobach
intranetu;

nie mog sczytywa ani zapisywa plikw na komputerze uytkownika;

nie mog zbiera informacji na temat komputera uytkownika, poza numerem


wersji Javy zainstalowanej na tym komputerze, nazw i wersj systemu operacyjnego
oraz rodzaju znakw uywanych przy rozdzielaniu plikw (np. \ lub /), cieek
dostpu (np. : lub ;) i linii (np. 5" lub 5)5"). Aplety nie mog pozna nazwiska
uytkownika, jego adresu e-mail itd.;

wszystkie wywietlane przez aplet okna zawieraj ostrzeenie.

Wszystko to jest moliwe, poniewa aplety s interpretowane przez wirtualn maszyn


Javy, a nie wykonywane bezporednio przez procesor komputera uytkownika. Poniewa interpreter sprawdza wszystkie krytyczne instrukcje i obszary kodu, niebezpieczny (lub bdnie
napisany) aplet prawie na pewno nie bdzie mg zawiesi komputera, skasowa wanych
fragmentw pamici lub zmieni priorytety ustalone przez system operacyjny.
W niektrych sytuacjach te ograniczenia okazuj si zbyt radykalne. Dla przykadu, w intranecie korporacji na pewno mogyby pojawi si aplety korzystajce z lokalnych plikw. Aby
ustanowi rne stopnie bezpieczestwa w rnych sytuacjach, korzystaj z apletw podpisanych. Aplety podpisane s przesyane wraz z certyfikatem identyfikujcym osob, ktra
podpisaa aplet. Techniki kryptograficzne gwarantuj autentyczno certyfikatu. Jeeli ufasz
tej osobie, moesz nada apletowi dodatkowe prawa (podpisywanie kodu omwimy w Java 2.
Techniki zaawansowane).

Rozdzia 10.

Aplety

543

Jeeli ufasz osobie, ktra podpisaa aplet, moesz poinformowa przegldark, aby nadaa
apletowi wiksze przywileje. Np. moesz da wikszy stopie swobody apletom pochodzcym
z intranetu Twojej firmy ni tym z www.hacker.com. Umoliwiajcy konfiguracj model
ochrony Javy pozwala na ustanowienie takiego poziomu bezpieczestwa, jakiego potrzebujesz. Apletom, ktrym ufasz cakowicie, moesz nada te same przywileje, co lokalnym
aplikacjom. Programom innych firm, o ktrych wiesz, e mog zawiera pewne niewielkie
bdy, moesz nada troch niszy stopie zaufania. Aplety nieznanego pochodzenia mog
zosta ograniczone do piaskownicy.
Podsumujmy powysze rozwaania. Java posiada trzy mechanizmy zarzdzajce bezpieczestwem systemu:
1. Kod programu jest interpretowany przez wirtualn maszyn Javy, a nie wykonywany

bezporednio.
2. Meneder ochrony sprawdza wszystkie podejrzane operacje nalece do biblioteki

wykonawczej Javy.
3. Aplety mog zosta podpisane, by uytkownicy wiedzieli, skd pochodz.
Model ochrony technologii ActiveX firmy Microsoft polega wycznie na trzecim mechanizmie. Jeeli chcesz uruchomi kontrol ActiveX, musisz jej cakowicie zaufa. Ten
model sprawdza si, jeeli programy pochodz od maej liczby zaufanych dostawcw,
ale cakowicie zawodz w przypadku sieci WWW. Jeeli uywasz Internet Explorera,
moesz sprawdzi, w jaki sposb dziaa ActiveX. Aby zainstalowa Java Plug-In w Internet
Explorerze, musisz zaakceptowa certyfikat firmy Sun. Certyfikat ten informuje tylko,
e kod programu pochodzi od firmy Sun. Nie mwi absolutnie nic o jakoci kodu. Gdy ju
zakoczysz instalacj, dziaanie programu Java Plug-In nie bdzie kontrolowane.

Okna dialogowe w apletach


Aplet jest wywietlany wewntrz strony internetowej, w ramce o rozmiarach okrelonych
przez wartoci % i %&%, bdce parametrami znacznika HTML. To powane ograniczenie. Wielu programistw zastanawia si, czy mogliby zbudowa okno dialogowe, aby lepiej
wykorzysta dostpn przestrze. Rzeczywicie, jest moliwe utworzenie ramki okna dialogowego. Poniej znajduje si prosty aplet zawierajcy jeden przycisk o etykiecie Kalkulator.
Gdy klikniesz ten przycisk, kalkulator pojawi si w nowym oknie.
atwo jest utworzy okno dialogowe. Po prostu skorzystaj z 6), ale nie pisz wywoania
#'  (#
)(".
 0 + 8 0 P 0  %&
 0  2 %1P 0 1&
 0  T%66466&

Gdy uytkownik klika przycisk, zmienia si stan ramki jeeli wczeniej bya wyczona,
teraz staje si widoczna, i odwrotnie. Gdy klikniesz przycisk kalkulatora, nad stron internetow pojawi si okno dialogowe. Gdy klikniesz ponownie, kalkulator zniknie.

544

Java 2. Podstawy
!K T/0P 0+ !K %1P 0 1&
T/0P 0  . %
 . %&
#
    ,O % 7  T &
#
O% 0 I%&& 0  I%O &
 0 B %&
9
9&

Jest jednak co, o czym musisz wiedzie, zanim umiecisz aplet na swojej stronie. Aby zobaczy, jak aplet wyglda na ekranie uytkownika, uruchom go w przegldarce internetowej,
a nie w przegldarce apletw. Do kalkulatora zostanie doczone ostrzeenie (rysunek 10.9).
Rysunek 10.9.
Okno dialogowe
wewntrz przegldarki
internetowej

We wczesnych wersjach przegldarek ostrzeenie brzmiao bardzo powanie: 7") # .."-( (8(-".$ '".(,"(. . 2). Kada nastpna wersja SDK
tonowaa ostrzeenie 7" "-. . . "-( ( ()2$(". (,"(
 . 2) lub )""89. . . "-( (
#)$:"9.
,"(.  . 2). Teraz
brzmi ono po prostu .."-( (
,"(. . 2).
Wiadomo ta jest elementem systemu bezpieczestwa przegldarek. Przegldarka internetowa upewnia si w ten sposb, e aplet nie wywietli okna dialogowego, ktre uytkownik
mgby pomyli ze standardow aplikacj. Moe si zdarzy, e stron odwiedzi niedowiadczony uytkownik, automatycznie uruchamiajc aplet, a nastpnie przez przypadek wpisze
w wywietlone okno dialogowe haso lub numer karty kredytowej, ktre to dane aplet wyle
serwerowi.
Aby unikn niebezpieczestwa zaistnienia takich sytuacji, wszystkie okna dialogowe uruchamiane przez aplet zawieraj etykiet ostrzeenia. Jeeli Twoja przegldarka obsuguje podpisane aplety, moesz skonfigurowa j tak, aby w przypadku programw, ktrym ufasz,
ostrzeenie nie byo wywietlane.
Listing 10.5 zawiera kod klasy (8 +, (). Kod klasy "+, ()
z rozdziau 9. nie uleg zmianie, zosta wic pominity.

Rozdzia 10.

Aplety

545

Listing 10.5. ApletDialoguKalkulatora.java


 
 
 
   
 
 

"  < P 0    !
$#
'   %&
(#
-AAT 
 0WT 
XX 0 0 
6
 0 + !L %&
 0  2 %1P 0 1&
 0  T%66466&
 0  )  , %& % , P 0  %&&
"
$AA SXTT/0  
X/ /5  0 0 
'
(!K T/0P 0+ !K %1P 0 1&
- )  , %& %T/0P 0&
6
T/0P 0  . %
 . %&
#
    ,O % 7  T &
"#
$O% 0 I%&& 0  I%O &
' 0 B %&
(9
-9&
69

 !L  0 
9

Znaczniki HTML oraz atrybuty apletw


Skoncentrujemy si teraz na znaczniku  , mimo i zosta on zanegowany w najnowszych
wersjach specyfikacji HTML Konsorcjum W3. Omwimy go, poniewa ani przegldarka apletw firmy Sun, ani konwerter HTML Java Plug-In nie rozpoznaj nowego znacznika
 .
W swojej podstawowej formie przykad zastosowania znacznika   wyglda nastpujco:
:,,.72);<7+1
   1=<2>+66>7?=>2+66@

Jak ju widziae, atrybut


 podaje nazw pliku klasy i musi zawiera rozszerzenie ##;
atrybuty % i %&% okrelaj rozmiar okna, w ktrym aplet zostanie wywietlony. Szeroko i wysoko jest mierzona w pikselach. Potrzebujesz rwnie odpowiedniego znacznika
 , ktry oznacza koniec elementw wymaganych przez aplet. Tekst pomidzy znacznikami   i   zostanie wywietlony wycznie wtedy, jeli wywietlenie apletu
okae si niemoliwe. Znaczniki te s wymagane jeeli ktrego brakuje, przegldarka
nie zaaduje apletu.

546

Java 2. Podstawy
Wszystkie podane informacje zostan wywietlone na stronie HTML, ktrej kod moe wyglda np. tak:
:>2C.@
:>7<@
:2=2.7@
  :A2=2.7@
:A>7<@
:K;<Q@
  W 
0  0 
  /5    TX! /F
:,,.72);<7+1
   1=<2>+66>7=?>2+66@
? //2 
TX 0 S S ! W4
 /

S/W  
:A,,.72@
:AK;<Q@
:A>2C.@

Zgodnie ze specyfikacj HTML znaczniki i atrybuty HTML, takie jak  , mog by
pisane zarwno wielkimi, jak i maymi literami. Wielko liter ma znaczenie tylko przy
identyfikacji nazwy klasy apletu. Wielko liter moe te mie znaczenie w przypadku
innych elementw, podawanych w cudzysowach, taki jak nazwy plikw JAR, ale pod
warunkiem, e serwer rozrnia wielkie i mae litery.

Atrybuty okrelajce pooenie apletu


Poniej znajdziesz krtkie omwienie atrybutw, ktrych moesz (lub musisz) uywa w definiowaniu znacznika  , aby okreli pooenie apletu. Dla osb znajcych HTML wiele
z tych atrybutw bdzie wyglda znajomo, poniewa s one podobne do atrybutw znacznika &, uywanego do umieszczania obrazu na stronie internetowej.
 %1.%&%

Te atrybuty s wymagane okrelaj wysoko i szeroko apletu, mierzone


w pikselach. W przegldarce apletw ich wartoci oznaczaj pocztkowy rozmiar
apletu. W przegldarce apletw moesz zmienia rozmiar okna. W przegldarce
internetowej rozmiar apletu nie moe zosta zmieniony. Bdziesz wic musia zgadywa,
ile miejsca powiniene przeznaczy na aplet, aby by czytelny dla wszystkich
uytkownikw.
 &

Ten atrybut okrela wyrwnanie apletu. Masz dwa wyjcia. Aplet moe znajdowa
si w okrelonym miejscu, a tekst bdzie go opywa, albo aplet moe zosta
umieszczony w linii tekstu, tak jakby by olbrzymi liter. Pierwsze dwie wartoci
(6 i 3&%) powoduj umieszczenie apletu w staym miejscu. Pozostae wartoci
sprawiaj, e aplet znajdzie si we wntrzu tekstu.
Wartoci, ktre moe przyjmowa atrybut, zostay wyszczeglnione w tabeli 10.1.
Rysunek 10.10 prezentuje wszystkie opcje wyrwnania apletu umieszczonego we wntrzu
tekstu. Pionowy pasek na pocztku kadej linii to obraz graficzny. Poniewa obraz jest wyszy
od tekstu, moesz zauway rnice pomidzy grnym i dolnym kocem linii a grnym i dolnym
kocem tekstu.

Rozdzia 10.

Aplety

547

Tabela 10.1. Atrybuty pooenia apletu


Atrybut

Dziaanie

.7L2

Umieszcza aplet przy lewej krawdzi strony. Znajdujcy si w danym miejscu tekst
zostanie przesunity na prawo od apletu

8=?>2

Umieszcza aplet przy prawej krawdzi strony. Znajdujcy si w danym miejscu tekst
zostanie przesunity na lewo od apletu

K;22;C

Dolny koniec apletu zostanie zrwnany z dolnym kocem tekstu w aktualnej linii

2;,

Grny koniec apletu zostanie zrwnany z grnym kocem aktualnej linii

27Y22;,

Grny koniec apletu zostanie zrwnany z grnym kocem tekstu w aktualnej linii

C=<<.7

rodek apletu zostanie zrwnany z lini bazow tekstu w aktualnej linii

KC=<<.7

rodek apletu zostanie zrwnany ze rodkiem aktualnej linii

K7.=7

Dolny koniec apletu zostanie zrwnany z lini bazow tekstu w aktualnej linii

KK;22;C

Dolny koniec apletu zostanie zrwnany z dolnym kocem aktualnej linii

I,)74>,)7

Te dodatkowe atrybuty okrelaj liczb pikseli wolnej przestrzeni, jaka powinna si


znale u gry i u dou (I,)7) oraz po lewej i po prawej stronie apletu (>,)7)

Rysunek 10.10.
Wyrwnanie apletu

Atrybuty dotyczce kodu apletu


Ponisze atrybuty apletu informuj przegldark, w jaki sposb powinna odnale kod apletu.



Ten atrybut podaje nazw pliku klasy apletu. Nazwa klasy jest wykorzystywana
z uwzgldnieniem atrybutu
  (zob. poniej) albo z uwzgldnieniem
aktualnej strony.

548

Java 2. Podstawy
Jeeli uywasz relatywnej cieki dostpu, musi ona wskazywa na pakiet pliku
klasy. Dla przykadu, jeeli klasa apletu znajduje si w pakiecie (('),
atrybut
 powinien wyglda nastpujco:
;<((')(##<.
Dozwolona jest rwnie skadnia
;<((')(##<. Jednak
w przypadku tego atrybutu nie moesz uywa absolutnej cieki dostpu. Jeeli
plik klasy znajduje si w innym katalogu, uyj atrybutu
 .
Atrybut
 okrela jedynie nazw pliku, ktry zawiera klas Twojego apletu.
Oczywicie, Twj aplet moe korzysta z innych klas. W momencie, gdy przegldarka
zaaduje gwn klas apletu, otrzyma informacje o innych wymaganych klasach
i wczyta je.
W znaczniku apletu musi znale si albo atrybut
, albo atrybut
 
(zob. poniej).

 

Ten opcjonalny atrybut informuje przegldark, e pliki klas znajduj si wewntrz


podkatalogu okrelonego przez ten atrybut. Na przykad, jeeli aplet o nazwie
+, () znajduje si w katalogu MojeAplety, a katalog MojeAplety
znajduje si poniej lokacji strony internetowej, powiniene napisa:
:,,.72);<7+1 P 0   1);<7K7+1C
 /1=<2>+66>7=?>2+"6@

Innymi sowy, informujesz przegldark, e pliki s rozmieszczone nastpujco:


P A
 P 0  B 
C
 /A
 P 0   
 3 %=

Ten opcjonalny atrybut zawiera plik lub list plikw archiwalnych zawierajcych
klasy oraz inne zasoby apletu (przejd do podrozdziau powiconego plikom JAR,
aby dowiedzie si wicej o plikach archiwalnych Javy). Pliki te s pobierane
z serwera, zanim aplet zostanie zaadowany. Ten mechanizm znaczco przyspiesza
proces adowania apletu, poniewa do cignicia pliku JAR, zawierajcego wiele
mniejszych plikw, wystarcza tylko jedno danie HTTP. Kolejne pliki JAR
rozdzielasz przy uyciu przecinka. Dla przykadu:
:,,.72);<7+1 P 0   18)>=I7+
1P /P 0  
4
AP /)! 
1
=<2>+66>7=?>2+"6@

Powyszy atrybut ma jedno bardzo wane zastosowanie. Jeeli Twj aplet uywa zestawu
Swing, ale w aden inny sposb nie korzysta z narzdzi Java 2, moesz go uruchomi
na przegldarkach zgodnych z Java 1.1 (takich jak Netscape 4 lub Internet Explorer),
dostarczajc plik JAR zawierajcy wszystkie klasy Swing. Moesz uzyska odpowiednie
archiwum, cigajc dodatek Swing dla Java 1.1 z http://java.sun.com/products/jfc/
#download-swing. Nastpnie musisz spakowa swj aplet w plik JAR i zaadowa go
wraz z plikiem JAR zestawu Swing. Aby tego dokona, dopisz do kodu strony parametr
3 %= (zob. poniej).
:,,.72);<7+1 P 0   1
8)>=I7+1P / P 0  
4 
1
=<2>+66>7=?>2+"6@

Rozdzia 10.

Aplety

549

Plik swing.jar ma rozmiar ok. jednego megabajta, co oznacza, e zaadowanie go troch


potrwa. Lepiej wic, aby nie korzysta z tego rozwizania, jeeli wiesz, e niektrzy
uytkownicy bd czy si z Twoj stron za porednictwem modemu. Oczywicie, Java
Plug-In jest jeszcze wikszy, ale wystarczy cign go tylko raz. Plik JAR adowany jest
za kadym razem.

 

Innym sposobem okrelania pliku klasy apletu jest podanie nazwy pliku zawierajcego
serializowany obiekt apletu jednake niektre przegldarki nie obsuguj tej
opcji. Jeeli chcesz z niej skorzysta, na pewno bdziesz musia zainstalowa Java
Plug-In (obiekt jest serializowany, gdy zapisujesz do pliku wartoci wszystkich pl
skadowych tego obiektu; serializacj omwimy w rozdziale 12.). Aby powrci do
pierwotnego stanu, obiekt jest deserializowany z pliku. Jeeli uywasz tego atrybutu
zamiast metody ", wywoywana jest metoda #) apletu. Przed serializowaniem
obiektu apletu powiniene wywoa metod #(. Atrybut
  jest uyteczny np.
w tworzeniu strony, ktra bdzie automatycznie przeadowywa aplety i wymusza na
nich powrt do tego samego stanu, w jakim znajdoway si, gdy przegldarka zostaa
zamknita. Jest to do wyspecjalizowane narzdzie, zazwyczaj niewykorzystywane
w projektach stron internetowych.
W znaczniku apletu musi znale si albo atrybut
, albo atrybut
 .
:,,.72;K!7)2+1 P 0  1=<2>+66>7=?>2+"6@
 

Programici jzykw skryptowych zazwyczaj nadaj apletom nazwy, aby mc


manipulowa nimi w skryptach. Zarwno Netscape Navigator, jak i Internet Explorer,
pozwalaj Ci wywoywa metody apletu za pomoc JavaScriptu. Nasza ksika
nie zajmuje si JavaScriptem, wic omwimy jedynie najwaniejsze elementy tego
jzyka skryptowego, za pomoc ktrych moesz wywoywa kod Javy.
JavaScript jest jzykiem skryptowym wykorzystywanym przez strony internetowe. Jzyk ten
zosta opracowany przez firm Netscape i pocztkowo nosi nazw LiveScript. Nie ma
on wiele wsplnego z Jav, moe poza pewnymi podobiestwami w skadni. Zmiana
nazwy na JavaScript bya posuniciem marketingowym. Podzbir elementw tego jzyka
(noszcy chwytliw nazw ECMAScript) otrzyma standard jako ECMA-262. Ale, co nikogo
ju nie dziwi, Netscape i Microsoft uywaj w swoich przegldarkach rnych, niezgodnych ze sob rozszerze tego standardu. Aby dowiedzie si wicej o JavaScript, zajrzyj
do ksiki JavaScript: The Definite Guide, autorstwa Davida Flanagana, wydanej przez
O'Reilly & Associates.

Aby skorzysta z apletu w kodzie JavaScript, musisz najpierw nada mu nazw.


:,,.72);<7+1 P 0   1
=<2>+66>7=?>2+"6
 @
:A,,.72@

Moesz teraz korzysta z niego, uywajc -( "#nazwaapletu. Na przykad:


  P 0+     

550

Java 2. Podstawy
Dziki magii integracji Javy i JavaScript, zaprogramowanej zarwno w Netscape, jak i w Internet
Explorerze, moesz wywoywa metody apletu:
 P 0 %&

(Nasz aplet kalkulatora nie posiada metody ); chcielimy jedynie zaprezentowa skadni.)
Na stronie http://www.javaworld.com/javatips/jw-javatip80.html Francis Lu uywa
komunikacji JavaScript Java, aby rozwiza odwieczny problem: zmieni rozmiar
apletu tak, aby nie by ograniczony przez podane wartoci atrybutw % i %&%.
Jest to dobry przykad integracji jzykw Java i JavaScript, jak rwnie ilustruje, ile kodu
potrzeba, aby napisa skrypt dziaajcy pod rnymi przegldarkami.

Atrybut  jest rwnie konieczny, gdy chcesz, aby dwa aplety na tej samej stronie komunikoway si ze sob bezporednio. Okrelasz nazw kadej instancji apletu, nastpnie
przekazujesz t nazw metodzie 8 klasy  ("4. Mechanizm ten, nazywany
komunikacj pomidzy apletami (ang. inter-applet communication), omwimy w dalszej czci rozdziau.

Atrybuty dotyczce przegldarek nie poczonych z Jav


Jeeli strona internetowa zawierajca znacznik   jest ogldana w przegldarce nie obsugujcej apletw, przegldarka zignoruje znaczniki   i 3. Tekst znajdujcy si
pomidzy znacznikami   i   zostanie wywietlony. Zwr uwag, e przegldarki poczone z Jav nie wywietlaj tekstu znajdujcego si pomidzy tymi znacznikami.
Dla tych biednych ludzi, ktrzy uywaj prehistorycznych przegldarek, moesz w tym miejscu
zamieci tekst wywietlany zamiast apletu. Na przykad:
:,,.72);<7+1 P 0   1=<2>+66>7=?>2+"6@
? //2 
TX 0 S S ! W4
 /

S/W0 0 
:A,,.72@

Oczywicie, wikszo obecnych przegldarek obsuguje Jav, ale ta obsuga moe czasami
zosta wyczona by moe przez uytkownika, a by moe przez cierpicego na paranoj
administratora systemu. Aby wspomc te nieszczliwe duszyczki, moesz wywietli wiadomo, korzystajc z atrybutu .
:,,.72);<7+1 P 0   1=<2>+66>7=?>2+"6
.2+1? //2 
TX 0 S S ! W4
 /

S/W0 0 1@

Znacznik OBJECT
Znacznik
  jest czci standardu HTML 4.0, a Konsorcjum W3 zaleca, aby programici
uywali go zamiast znacznika  . Znacznik
  posiada 35 rnych atrybutw, z ktrych
wikszo (jak np.
+>
) jest istotna wycznie dla ludzi programujcych w Dynamic
HTML. Atrybuty pozycjonowania, takie jak & i %&%, dziaaj dokadnie tak samo, jak
w przypadku znacznika  . Kluczowym dla apletw Javy atrybutem znacznika
 

Rozdzia 10.

Aplety

551

jest atrybut . Atrybut ten okrela lokacj obiektu. Oczywicie, znaczniki
 
mog adowa rne rodzaje obiektw, takie jak aplety Javy lub komponenty ActiveX, czyli
np. sam Java Plug-In. W atrybucie
>  opisujesz charakter obiektu. Dla przykadu, typem
kodu apletw Javy jest (". Oto znacznik
  wczytujcy aplet Javy:
:;K!7)2
);<72Q,7+1  A
1
).=<+1
F P 0   1
=<2>+66>7=?>2+"6@

Zauwa, e po atrybucie  moe wystpowa atrybut


 , ktry dziaa dokadnie
tak, jak w przypadku znacznika  .
W aktualnych wersjach przegldarek Netscape Navigator i Internet Explorer moesz ju
uywa znacznika
 , ale przegldarka apletw oraz konwerter HTML Java Plug-In nie
rozpoznaj tego znacznika.

Znaczniki Java Plug-In


Java Plug-In zostaje zaadowany jako rozszerzenie Netscape lub kontrolka ActiveX, przy
uyciu znacznikw   lub
 . Dla przykadu, ekwiwalentem znacznika:
:,,.72
);<7+1 P 0   1
);<7K7+1C
 /1
=<2>+66
>7=?>2+"6@
:,8CC7+1)T0 1I.N7+1>   1@
:A,,.72@

w przegldarce Netscape Navigator jest:


:7CK7<2Q,7+1  AE
E   +1
,.N?=,?7+1B FAA
A  AA
AE B 1
);<7+1 P 0   1
);<7K7+1C
 /1
=<2>+66
>7=?>2+"6@
:,8CC7+1)T0 1I.N7+1>   1@
:A7CK7<@

Natomiast w Internet Explorerze:


:;K!7)2).=<+1 F(<-)(6E67E<EK7-E66(6"L--<-1
);<7K7+1B FAA
A  AA
A
 EE  MI+446461
=<2>+66
>7=?>2+"6@
:,8CC7+12Q,71I.N7+1  AE
E  
 +1@
:,8CC7+1);<71I.N7+1 P 0   1@
:,8CC7+1);<7K71I.N7+1C
 /1@
:,8CC7+1)T0 1I.N7+1>   1@
:A;K!7)2@

552

Java 2. Podstawy
Poniej znajduj si detale konwertowania znacznikw, jeeli koniecznie chcesz dokona
konwersji wasnorcznie.
Konwersja znacznika   na znacznik   jest prosta zmie   na  , a take
docz atrybuty >  i 7& &.
Konwersja znacznika   na znacznik
  jest bardziej zoona. Musisz dopisa atrybuty
 i
  oraz doczy znacznik 3 o nazwie >  (  ma zawsze t sam
warto; jest to globalny numer ID ActiveX, oznaczajcy Java Plug-In). Zachowaj wszystkie
atrybuty, oprcz tych znajdujcych si w tabeli 10.2, poniewa musz one zosta skonwertowane na znaczniki 3. Jeeli moe zaistnie konflikt pomidzy nimi a ju wpisanymi
znacznikami 3, w nazwach parametrw moesz uy prefiksu =? ; na przykad:
:,8CC7+1!IJ);<71I.N7+1 P 0   1@

Tabela 10.2. Konwertowanie znacznika APPLET na znacznik OBJECT


APPLET

OBJECT

.2+

brak

8)>=I7+

:,8CC7+18)>=I71I.N7+@

);<7+

:,8CC7+1);<71I.N7+@

);<7K7+

:,8CC7+1);<7K71I.N7+@

;K!7)2+

:,8CC7+1;K!7)21I.N7+@

Jak widzisz, rnice pomidzy tymi znacznikami sprowadzaj si do kosmetyki. W praktyce


najatwiej jest uywa konwertera HTML Java Plug-In albo innego skryptu, ktry automatycznie wygeneruje odpowiedni kod HTML.
Konwerter HTML Java Plug-In generuje rwnie kod, ktry automatycznie wybiera znaczniki
odpowiadajce danej przegldarce. W tym celu konwerter korzysta ze skryptw JavaScript
lub uywa niesamowicie zagmatwanej sekwencji znacznikw, z ktrych cz jest ignorowana,
zalenie od uywanej przegldarki. Aby dowiedzie si wicej o tej koncepcji, przejrzyj
dokumentacj konwertera HTML lub stron http://java.sun.com/products/jfc/tsc/articles/
plugin/index.html.

Przekazywanie informacji apletom


Tak jak aplikacje mog korzysta z informacji wpisanych w linii polece, tak aplety mog
uywa parametrw zamieszczonych w pliku HTML. Moesz przekaza te informacje,
uywajc znacznika 3, wraz ze zdefiniowanym przez Ciebie atrybutami. Dla przykadu
zamy, e chcesz, aby strona HTML okrelaa styl czcionki uywanej przez aplet. W tym
celu moesz skorzysta z nastpujcych znacznikw:
:,,.72);<7+1 )T0 1=<2>+66>7=?>2+66@
:,8CC7+1T0 1I.N7+1>   1@
:A,,.72@

Rozdzia 10.

Aplety

553

Aplet pobiera warto parametru, korzystajc z metody 8 )) klasy , jak w poniszym przykadzie:
  )T0  !
#
   %&
#
  T )T0+ ,   %1T0 1&

9

9

Metod 8 )) moesz wywoa wycznie w metodzie ", nie w konstruktorze.
Gdy uruchamiany jest konstruktor, parametry nie s jeszcze okrelone. Poniewa ukad
graficzny wikszoci apletw jest okrelany przez parametry, zalecamy, aby nie pisa konstruktorw apletw. Cay kod inicjalizacyjny moesz po prostu umieci w metodzie ".

Parametry zawsze s acuchami. Jeeli parametr powinien by liczb, musisz go skonwertowa. Dokonujesz tego w standardowy sposb, uywajc odpowiedniej metody, np. )#"
klasy "8).
Dla przykadu, gdyby chcia doczy parametr rozmiaru czcionki, kod HTML mgby wyglda nastpujco:
:,,.72);<7+1 )T0 1=<2>+66>7=?>2+66@
:,8CC7+1T0 1I.N7+11@
:A,,.72@>   1@
:,8CC7+1T 1I.N7+1

Poniszy kod rdowy ilustruje, w jaki sposb moesz wczyta parametr liczbowy.
  )T0  !
#
   %&
#
  T )T0+ ,   %1T0 1&
 T )T0+=  = % ,   %1T 1&&

9
9

acuchy uywane w definicji parametrw za pomoc znacznika 3 musz si dokadnie


zgadza z tymi w wywoaniach metody 8 )). W szczeglnoci, w jednych i drugich
istotna jest wielko liter.

Aby dodatkowo upewni si, czy parametry w Twoim kodzie zgadzaj si ze sob, powiniene
sprawdza, czy nie zosta pominity parametr )($). Dokonujesz tego, sprawdzajc, czy jego
warto wynosi " . Na przykad:
 T )T0
  8T + ,   %1T 1&
O% 8T ++&T )T0+
T )T0+=  = % 8T &

554

Java 2. Podstawy
Poniej znajduje si uyteczny aplet korzystajcy z wielu parametrw. Aplet ten rysuje wykres kolumnowy przedstawiony na rysunku 10.11.

Rysunek 10.11.
Aplet Wykres

Aplet pobiera wysokoci kolumn, korzystajc ze znacznikw 3 w pliku HTML. Plik HTML
tworzcy rysunek 10.11 wyglda nastpujco:
:,,.72);<7+1/0 1=<2>+66>7=?>2+66@
:,8CC7+1 / 1I.N7+1Z   1@
:,8CC7+1  1I.N7+1-1@
:,8CC7+1 T J1I.N7+1C0/1@
:,8CC7+1 T J1I.N7+11@
:,8CC7+1 T J1I.N7+1* 1@
:,8CC7+1 T J1I.N7+1C 1@
:,8CC7+1 T J"1I.N7+1! T1@
:,8CC7+1 T J$1I.N7+1 1@
:,8CC7+1 T J'1I.N7+1N 1@
:,8CC7+1 T J(1I.N7+1 1@
:,8CC7+1 T J-1I.N7+1, 1@
:,8CC7+1  J1I.N7+1661@
:,8CC7+1  J1I.N7+1'"661@
:,8CC7+1  J1I.N7+1(6661@
:,8CC7+1  J1I.N7+1661@
:,8CC7+1  J"1I.N7+1((6661@
:,8CC7+1  J$1I.N7+1'6661@
:,8CC7+1  J'1I.N7+16661@
:,8CC7+1  J(1I.N7+16$661@
:,8CC7+1  J-1I.N7+161@
:A,,.72@

Oczywicie, moge umieci w aplecie tablic acuchw oraz tablic liczb, ale z uycia
mechanizmu 3 wynikaj dwie istotne korzyci. Na swojej stronie internetowej moesz
mie wiele kopii tego samego apletu, ukazujcego rne wykresy po prostu umieszczasz
na stronie dwa znaczniki  , zawierajce rne zbiory parametrw. Co wicej, moesz
zmienia dane, ktre chcesz umieci na wykresie. Przyznajemy, e rednice planet nie zmieni
si w najbliszym czasie, ale zamy na przykad, e Twoja strona zawiera wykres wynikw
sprzeday w danym tygodniu. Aktualizacja strony internetowej jest prosta, poniewa HTML
to czysty tekst. Cotygodniowa edycja i rekompilacja pliku Javy jest ju bardziej skomplikowana.

Rozdzia 10.

Aplety

555

W rzeczywistoci istniej komercyjne programy JavaBeans tworzce bardziej wymylne


wykresy ni nasz aplet. Jeeli kupisz jeden z nich, moesz umieci go na stronie i dostarcza
wymagane parametry, nie wiedzc nawet, w jaki sposb bdzie on rysowa wykres.
Listing 10.6 zawiera kod rdowy naszego rysujcego wykresy apletu. Zwr uwag, e metoda
" wczytuje parametry, a metoda " (("" rysuje wykres.
Listing 10.6. Wykres.java
 
 
 
 O 
 
 
 
 
"
$ /0  !
'#
(   %&
-#
6  + ,   %1  1&
O% ++& 
 +=  = % &
 [\  +  [\
 [\ T /+  [\
" 
$O%+6:]]&
'#
(  [\+< <
-% ,   %1  J1]%]&&&
6 T /[\+ ,   %1 T J1]%]&&
9

)  *  + )  , %&
 *   % , /0%  4 T /4
" ,   %1 / 1&&&
$9
'9
(
-A
6, /
X/ /0
A
 , /0  !, 
#
A
" T/0  /, /0
$^       5 /0
'^     T   5
(^    / S /0
-A
6, /0% [\ 4 [\4  &
#
 T /+
  + 
 / + 
"9
$
'    ) %? B&
(#

556

Java 2. Podstawy
-  ) %&
"6? B<+%? B<&
"
"AAT  5V X 0/ X
"O%  ++& 
"  C  +6
""  C 0/  +6
"$O% +6:   B]]&
"'#
"(O% C  @  [\& C  +  [\
"-O% C 0/  :  [\& C 0/  +  [\
$69
$O% C 0/  ++ C  & 
$
$ T, +  B%&
$  /, + >B %&
$"
$$L T0 2/ + L %1 O14L K;.<46&
$'L T0 7 /0 /+ L %1 O14L ,.=46&
$(
$-AAT TBWT
 XTT / S
'6L 8 )  0 0 + L 8 )  %&
'8 <0  T2/ 
'+T0 2/   K % / 40 0 &
' T2/ +0  T2/   B%&
'  +0  T2/  >B %&
'"
'$AA /
 / S
'' /+E0  T2/  Q%&AA T
'( +%T, ET2/ &A
'- L %T0 2/ &
(6   % / 4%O &4%O &/&
(
(AAT TBWT
 XTT /0 / 0R
(.C  /0 7 /0 /
(+T0 7 /0 / .C %1140 0 &
("  + /0 7 /0 / >B %&
($
('/+ /, E /0 7 /0 / < %&
(( L %T0 7 /0 /&
(-
-6AAT RST/00  T /05V 0R
- 0  +% /, E E &
-A% C 0/  E C  &
- TP/+T, A   B
-
-"AA /
0/
-$O% +6:   B]]&
-'#
-(AAT0 / /   0X T  
X0W
-- +TP/]
66 /+ 
6  /0+  [\0  
6O%  [\@+6&
6/]+% C 0/  E  [\&0  
6
6"#
6$/]+ C 0/  0  

Rozdzia 10.

Aplety

557

6' /0+E /0


6(9
6-
6AA /S
0W0 /


0 W U
8 < + 8 <<%4/4
TP/E4 /0&
 ,  %) &
O% &
" ,  %) 0&
$  % &
'
(AA 0X /
 /5 0 X /0 W
-8 <0  T7 /0 /
6+T0 7 /0 /  K % T /[\40 0 &

 T7 /0 /+0  T7 /0 /  B%&
+TP/]%TP/ET7 /0 /&A
   % T /[\4%O &4%O &/&
"9
$9
'
(  [\  
-  [\ T /
6   / 
9

 
  !.)"8.8 ))/)"8."$0.pobiera

parametr zdefiniowany przez


dyrektyw 3 znajdujc si na stronie, ktra aduje dany aplet. Wielko liter
w acuchu ma znaczenie.

  !.)"8.8"'(/0.jest

to metoda, ktr wielu autorw apletw


przeadowuje, aby zwracaa acuch zawierajcy informacje o autorze, wersji oraz
prawach autorskich danego apletu. Powiniene udostpni te informacje, przeadowujc
powysz metod w swojej klasie apletu.

  !.)"8@A@A.8 ))"'(/0.jest

to metoda, ktr wielu autorw apletw


przeadowuje, aby zwracaa tablic opcji znacznika 3 dostarczanych przez aplet.
Kady rzd zawiera trzy komrki: nazw, typ oraz opis parametru. Oto przykad:
1O141E6141 0 0 W1
1 T141 141T/ RT/VW W TR _1
1 T/1411410 T 
X/ T/1

Multimedia
Aplety mog obsugiwa zarwno pliki graficzne, jak i dwikowe. W chwili, gdy piszemy te
sowa, pliki graficzne musz mie format GIF lub JPEG, dwikowe AU, AIFF, WAV
lub MIDI. Animowane pliki GIF s akceptowane i uruchamiane. Zazwyczaj pliki zawierajce te
informacje s okrelane przez adres URL, ktry musimy wczeniej pobra.

558

Java 2. Podstawy

Adresy URL
URL jest opisem zasobu znajdujcego si w Internecie. Dla przykadu, <9# "(
"-4< informuje przegldark, aby uya protokou przesyania hipertekstu dla pliku
index.html znajdujcego si w witrynie java.sun.com.
Java posiada klas 73 opisujc adresy URL. Najprostszym sposobem utworzenia adresu URL
jest przekazanie acucha jako parametru konstruktora 73:
N8.+ N8.%1B FAA
A B 1&

Taki adres nazywamy absolutnym adresem URL, poniewa okrelamy kompletn ciek
dostpu do zasobu. Innym uytecznym konstruktorem 73 jest konstruktor adresu relatywnego.
N8. + N8.%41 A  / 1&

Dziki temu okrelamy pooenie pliku planety.dat znajdujcego si w podkatalogu dane


adresu .
Obydwa konstruktory upewniaj si, czy podajc URL, uye prawidowej skadni. Jeeli nie,
wywouj '()-734(" (wyjtek zego formatu URL). Jest to jeden z wyjtkw,
ktrych kompilator nie pozwoli Ci zignorowa. Odpowiedni kod wyglda nastpujco:
/
#
 +1B FAA
A B 1
N8.+ N8.%&

9
 B%C O N8.7  /
0&
#
AA0 S
X/SX
 /
0  02 %&
9

Skadni obsugi wyjtkw omwimy w rozdziale 12. Do tego czasu, jeeli napotkasz kod
podobny do tego z naszych przykadowych programw, po prostu przejd do porzdku dziennego nad sowami kluczowymi )2 i .
Typowym sposobem uzyskiwania adresu URL jest zapytanie apletu, skd pochodzi, czyli:


Jaki jest adres URL strony wywoujcej aplet?

Jaki jest adres URL samego apletu?

Aby uzyska pierwszy z nich, skorzystaj z metody 8( " # ; aby otrzyma drugi,
skorzystaj z 8 (- #. Tych metod nie musisz umieszcza w bloku )2.
Za porednictwem apletw oraz Java Plug-In moesz uzyska dostp do bezpiecznych
stron internetowych (https) przeczytaj http://java.sun.com/products/plugin/1.3/docs/
https.html. Aby tego dokona, programy korzystaj z mechanizmw SSL przegldarki.

Rozdzia 10.

Aplety

559

Tworzenie plikw multimedialnych


Za pomoc metody 88 oraz 8 -(  mona utworzy obrazy oraz pliki audio. Na
przykad:
= 0 + = % < K %&41 T/A0 O1&
 ) +  )% < K %&41  A  1&

W powyszym przykadzie uywamy metody 8( " #/0, zwracajcej URL, z ktrego
aplet zosta cignity. Drugi argument konstruktora 73 okrela lokalizacj wzgldem dokumentu bazowego, pod ktr znajduje si obraz lub plik dwikowy (aplety nie musz posugiwa si obiektami typu ((,, aby otrzyma plik graficzny).
Pliki graficzne i dwikowe musz znajdowa si na tym samym serwerze, z ktrego pochodzi aplet. Ze wzgldw bezpieczestwa aplety nie maj dostpu do plikw na innych
serwerach (aplety mog dzwoni wycznie do domu).

Kiedy ju zaadujesz obrazy i pliki audio, to jakie operacje moesz na nich przeprowadza?
W rozdziale 7. dowiedziae si, w jaki sposb mona wywietla pojedynczy obraz. W Java 2.
Techniki zaawansowane, w rozdziale dotyczcym wielowtkowoci, znajdziesz informacje
odnonie wywietlania animacji zoonej z wielu obrazw. Aby uruchomi plik audio, wywoujesz po prostu metod 2.
Moesz rwnie wywoa metod 2 bez wczeniejszego zaadowania pliku audio.
 /% < K %&41  A  1&

Jednake aby wywietli obraz, musisz go najpierw zaadowa.


Aby przyspieszy adowanie, obiekty multimediw mona przechowywa w plikach JAR
(przejd do nastpnego podrozdziau). Metody 88 oraz 8 -( /2 przeszukuj automatycznie pliki JAR apletu. Jeeli obraz lub plik dwikowy jest przechowywany
w pliku JAR, zostanie natychmiast zaadowany. W przeciwnym wypadku przegldarka zada
go od serwera.



 73/)"8."$0.tworzy

obiekt URL na podstawie acucha opisujcego

absolutny adres URL.


 73/)"8.!$1.)"8."$0.tworzy

relatywny obiekt URL. Jeeli acuch

"$ opisuje absolutny adres URL, acuch !$ zostanie zignorowany.


W przeciwnym wypadku acuch "$ zostanie potraktowany jako podkatalog
adresu URL opisywanego przez !$.

 
 73.8( " #/0.pobiera
 73.8 (- #/0.pobiera

adres URL strony, na ktrej znajduje si dany aplet.

adres URL, pod ktrym znajduje si sam aplet.

560

Java 2. Podstawy
 (-.2/73. )0
 (-.2/73. )1.)"8."$0.pierwsza

wersja metody uruchamia plik audio


okrelony przez podany URL. Druga wersja uywa acucha okrelajcego relatywn
ciek dostpu wzgldem adresu podanego w pierwszym argumencie. Jeeli plik
nie zostanie odnaleziony, nic si nie dzieje.

  -( .8 -( /73. )0


  -( .8 -( /73. )1.)"8."$0.pierwsza

wersja metody
pobiera plik audio znajdujcy si pod podanym adresem. Druga wersja uywa
acucha okrelajcego relatywn ciek dostpu wzgldem adresu podanego
w pierwszym argumencie. Jeeli plik nie zostanie odnaleziony, metoda zwraca " .

 8.88/73. )0
 8.88/73. )1.)"8."$0.zwraca

obiekt typu Image, zawierajcy


obraz znajdujcy si pod podanym adresem. Jeeli obraz nie istnieje, metoda
natychmiast zwraca " . W przeciwnym wypadku uruchamiany jest osobny wtek
pobierajcy obraz. Otrzymywanie plikw zostao opisane w rozdziale 7.

Kontekst apletu
Aplet dziaa wewntrz przegldarki internetowej lub przegldarki apletw. Aplet moe zada
od przegldarki wykonania pewnych operacji, na przykad dostarczenia mu pliku audio, wywietlenia krtkiej wiadomoci w polu statusu lub wywietlenia innej strony internetowej.
Przegldarka moe wykona te polecenia lub zignorowa je. Dla przykadu, jeeli aplet uruchamiany wewntrz przegldarki apletw zada od przegldarki wywietlenia strony internetowej, nic si nie stanie.
Komunikujc si z przegldark, aplet wywouje metod 8 ("4. Metoda ta zwraca
obiekt implementujcy interfejs typu  ("4. O konkretnej implementacji interfejsu
 ("4 moesz myle jako o kablu czcym aplet z przegldark. Oprcz 8 -(*
 i 88, interfejs  ("4 zawiera kilka innych metod, ktre omwimy w poniszych podrozdziaach.

Komunikacja pomidzy apletami


Strona internetowa moe zawiera wicej ni jeden aplet. Jeeli strona zawiera wiele apletw
o tym samym atrybucie
 , mog one komunikowa si ze sob. Oczywicie, jest to
do skomplikowane zagadnienie, ktrym rzadko bdziesz si zajmowa.
Jeeli dla kadego apletu w pliku HTML podasz atrybut , bdziesz mg uywa metody
8/)"80 interfejsu  ("4, aby pobra referencj dowolnego apletu. Dla
przykadu, jeeli plik HTML zawiera znacznik
:,,.72);<7+1/0 1=<2>+66>7=?>2+66C7+1/01@

to wywoanie
  /0+  )  %&  %1/01&

Rozdzia 10.

Aplety

561

zwrci referencj tego apletu. Co moesz zrobi z t referencj? O ile w klasie 2,)# umiecie
metod pozwalajc na pobranie nowych danych i ponowne narysowanie wykresu, moesz j
wywoa, dokonujc odpowiedniego rzutowania.
%%/0& /0&T< %41* 14-666&

Moesz rwnie pobra list apletw na stronie, nawet jeeli nie posiadaj one atrybutu .
Metoda 8# zwraca tak zwany obiekt enumeracji (o enumeracji dowiesz si wicej
z Java 2. Techniki zaawansowane). Oto ptla wywietlajca nazwy klas wszystkich apletw
znajdujcych si na aktualnej stronie:
7 +  )  %&  %&
B%B C7 %&&
#
;
  + 7 %&
/   %  ) %&  %&&
9

Aplety nie mog komunikowa si z apletami pochodzcymi z innych stron internetowych.

Wywietlanie elementw w przegldarce


Z poziomu apletu masz dostp do dwch obszarw przegldarki internetowej: pola statusu,
oraz obszaru wywietlania stron internetowych. Obydwa obszary uywaj metod klasy *
("4.
Moesz wywietli acuch w polu statusu przy dolnej krawdzi przegldarki, uywajc
metody #( #, np.:
B  %1`   /BTWT0 V1&

Z naszego dowiadczenia wynika, e metoda #( # nie jest zbyt uyteczna. Przegldarka rwnie uywa pola statusu i do czsto zdarza si, e nadpisuje Twoj drogocenn wiadomo czym w stylu <B-(". <. Korzystaj z pola statusu w przypadku mao znaczcych wiadomoci, jak np. <B-(".-"2.)(#$C.$,D<, ale
nie w sytuacji, gdy uytkownik mgby mie problemy z powodu przeoczenia wiadomoci.

Za pomoc metody #(( " moesz zada od przegldarki, aby wywietlia inn
stron internetow. Moesz tego dokona na kilka sposobw. Najprostszym jest wywoanie
#(( " z jednym argumentem adresem URL, pod ktry chcesz si dosta.
N8.+ N8.%1B FAA
A B 1&
  )  %&B < %&

Problem polega na tym, e powysze wywoanie otwiera now stron w tym samym oknie,
w ktrym znajduje si strona aktualna, zatrzymujc tym samym aplet. Aby powrci do apletu,
uytkownik musi klikn przycisk Wstecz w swojej przegldarce.
Moesz poinformowa przegldark, aby wywietlia aplet w innym oknie, podajc w wywoaniu #(( " drugi parametr. Powinien to by acuch. Jeeli bdzie to specjalny
acuch, <?!",<, przegldarka, zamiast zmienia zawarto aktualnego okna, otworzy
nowe, zawierajce podany dokument. Co waniejsze, jeeli skorzystasz z ramek HTML,
bdziesz mg podzieli okno przegldarki na kilka ramek, z ktrych kada bdzie miaa

562

Java 2. Podstawy
wasn nazw. Bdziesz mg umieci aplet w jednej z ramek, a w drugiej wywietla przy
jego uyciu rne dokumenty. W nastpnym podrozdziale zaprezentujemy przykad takiego
rozwizania.
Tabela 10.3 zawiera wszystkie moliwe argumenty metody #(( ".

Tabela 10.3. Argumenty showDocument


Drugi argument metody showDocument

Pooenie

1JO1 lub brak

Wywietla dokument w aktualnej ramce


Wywietla dokument w ramce rodzica
Wywietla dokument w ramce bazowej dla wszystkich innych
Wywietla nowe, nienazwane okno najwyszego poziomu
Wywietla dokument w ramce o podanej nazwie. Jeeli ramka
o tej nazwie nie istnieje, otwiera nowe okno i nadaje mu t nazw

1J  1
1J 1
1J 01

Kady inny acuch

 
  !. ("4.8 ("4/0.zwraca

uchwyt rodowiska
przegldarki internetowej. W przypadku wikszoci przegldarek moesz uy tej
informacji do kontrolowania przegldarki, w ktrej uruchamiany jest aplet.

 (-.#( #/)"8.-0.wywietla

podany acuch w polu statusu

przegldarki.
  -( .8 -( /73. )0.zwraca

obiekt typu  -( , przechowujcy


plik dwikowy okrelony przez podany adres URL. Aby go uruchomi, skorzystaj
z metody 2.

 

 " )(".8#/0.zwraca

enumeracj (wicej informacji w Java 2.


Techniki zaawansowane) wszystkich apletw w aktualnym kontekcie, czyli na tej
samej stronie internetowej.

 .8/)"8."$0.zwraca

aplet aktualnego kontekstu o podanej


nazwie, a jeeli taki aplet nie istnieje, zwraca " . Przeszukiwana jest wycznie
aktualna strona internetowa.

 (-.#(( "/73. )0


 (-.#(( "/73. )1.)"8.0.wywietla

nowy dokument w podanej


ramce przegldarki. Pierwsza wersja metody powoduje zamian aktualnej strony na
now. Druga wersja uywa acucha identyfikujcego docelow ramk. acuch 
moe wyglda nastpujco: <?#'< (strona wywietlana w aktualnej ramce, dokadnie
tak samo jak w przypadku pierwszej wersji tej metody), <?)"< (strona wywietlana
w ramce rodzica), <?(< (strona wywietlana w ramce najwyszego poziomu) oraz
<?!",< (strona wywietlana w nowym, nienazwanym oknie najwyszego poziomu).
acuch  moe rwnie by nazw docelowej ramki.

Przegldarka apletw firmy Sun nie wywietla stron internetowych. Polecenia #((*
 " s przez ni ignorowane.

Rozdzia 10.

Aplety

563

Aplet Spis adresw


Poniszy aplet korzysta z ramek standardu HTML 3.2 i nowszych. Podzielilimy ekran na
dwie pionowe ramki. Ramka po lewej zawiera aplet Javy wywietlajcy list adresw internetowych. Gdy wybierzesz ktry z nich, aplet wywietli w ramce po prawej odpowiedni
stron (patrz rysunek 10.12).
Rysunek 10.12.
Aplet Spis adresw

Listing 10.7 zawiera plik HTML definiujcy ramki.


Listing 10.7. SpisAdresow.html
:>2C.@
:>7<@
:2=2.7@ 1 R 1:A2=2.7@
:A>7<@
":L8C772);.+1641@
$:L8C7C7+1 18)+1. B 1
'C8?=>7=?>2+C8?==<2>+
()8;..=?+11;87=*7@
-:L8C7C7+1 18)+1, B 1
6C8?=>7=?>2+C8?==<2>+
)8;..=?+1/1;87=*7@
:AL8C772@
:A>2C.@

Nie bdziemy omawia skadni tego pliku. Istotne jest to, e kada z ramek posiada dwa
elementy: nazw (podan przez atrybut ) oraz adres URL (podany przez atrybut 3 ).
Nie moglimy wymyli adnych dobrych nazw dla ramek, wic nazwalimy je po prostu
<< i <)<.
Ramka po lewej (patrz listing 10.8) wczytuje plik o nazwie Lewa.html, ktry aduje aplet.
Plik Lewa.html okrela po prostu dane apletu oraz list adresw. Moesz edytowa ten plik,
zmieniajc list adresw i dostosowujc j do swojej strony internetowej.

564

Java 2. Podstawy

Listing 10.8. Lewa.html (przed skonwertowaniem go przy uyciu konwertera HTML)


:>2C.@
:2=2.7@ 1 R 1:A2=2.7@
:K;<Q@
P0

 TaT/BTSXT0R 
";  
X     
$T  /5      

':,@
(:,,.72);<7+1   1=<2>+-6>7=?>2+66@
-:,8CC7+0JI.N7+1B FAA
1@
6:,8CC7+0JI.N7+1B FAA   1@
:,8CC7+0JI.N7+1B FAA TB 1@
:,8CC7+0JI.N7+1B FAA B  1@
:,8CC7+0J"I.N7+1B FAA B 1@
:,8CC7+0J$I.N7+1B FAA1@
":,8CC7+0J'I.N7+1B FAA   1@
$:A,,.72@
':AK;<Q@
(:A>2C.@

Ramka po prawej (patrz listing 10.9) wczytuje prosty plik, ktry nazwalimy Prawy.html
(przegldarka Netscape nie pozwala na istnienie ramek nie posiadajcych plikw, musielimy
wic dostarczy plik wczytywany na samym pocztku).
Listing 10.9. Prawa.html
:>2C.@
:2=2.7@
2W X /5    /   
:A2=2.7@
":K;<Q@
$P0

 TTSXT0R  

'2
T  /5            
(:AK;<Q@
-:A>2C.@

Kod apletu Spis adresw, zawarty w listingu 10.10, jest do prosty. Wczytuje wartoci
parametrw ",?E, ",?F itd., i zmienia kad z nich w przecznik. Gdy wybierzesz jeden
z przecznikw, metoda #(( " wywietli odpowiedni stroni internetow w ramce
po prawej.
Listing 10.10. SpisAdresow.java
 
 
 
   
 
  
 
 
" 
 
$ 
 
'
(     !
-#
6   %&
#
K 0+K I  K%&
K ? + K ?%&

Rozdzia 10.

Aplety

565


" +
$ S bBN8.
'
(AA T/
 T/ 0   /0J
- B%%S bBN8.+ ,   %10J1]&&H+&
6#

 /
#
O N8.+ N8.%S bBN8.&
"
$AA  0 a 0 RTTSXT0
'!8 K T/0+ !8 K %S bBN8.&
( 0 %T/0&
-  %T/0&
6
AA /RTSXT0   
 /5   N8.
AA  1 1
T/0  . %
 . %&
"#
$    ,O % 7  T T&
'#
( )  0 0 +  )  %&
-0 0 B < %41 1&
69
9&
9
 B%C O N8.7  /
0&
#
" /
0  02 %&
$9
'
(]]
-9
"6
")  *  + )  , %&
" *   % 0&
"9
"9

To aplet. Nie, to aplikacja. To jedno i to samo!


Kilka lat temu telewizyjny program rozrywkowy Saturday Night Live wyemitowa reklam
przedstawiajc maestwo sprzeczajce si o bia, elatynow substancj. M mwi:
To przybranie do deserw. ona mwia: To wosk do podogi. A spiker odpowiada triumfalnym gosem: To jedno i to samo!.
Czytajc ten podrozdzia, nauczysz si pisa w Javie program, ktry bdzie rwnoczenie
apletem i aplikacj. Oznacza to, e bdziesz mg go zaadowa przy uyciu przegldarki
apletw lub przegldarki internetowej, albo te moesz go uruchomi z linii polece za
pomoc interpretera Javy. Trudno powiedzie, jak czsto bdzie Ci potrzebne takie rozwizanie pomylelimy jednak, e jest cakiem interesujce i e na pewno warto je pozna.

566

Java 2. Podstawy
Zrzuty ekranw przedstawione na rysunkach 10.13 i 10.14 przedstawiaj ten sam program,
wywoany z linii polece jako aplikacja oraz ogldany w przegldarce apletw jako aplet.

Rysunek 10.13.
Kalkulator
jako aplikacja

Rysunek 10.14.
Kalkulator
jako aplet

Zobaczmy, jak tego dokonano. Kady plik klasy posiada dokadnie jedn klas publiczn.
Aby przegldarka apletw moga j uruchomi jako aplet, klasa ta musi rozszerza klas
. Aby Java moga j uruchomi jako aplikacj, musi posiada statyczn metod ".
A zatem mamy co nastpuje:
 C
 0 
  !
#
   %&#9

    % [\ &#9
9

Co moemy umieci w metodzie "? Zazwyczaj tworzymy obiekt jakiej klasy i wywoujemy dla niego metod #(. Jednak w tym wypadku nie jest to takie proste. Nie moesz
wywietli surowego apletu. Aplet musi znale si wewntrz ramki. A gdy ju znajdzie si
wewntrz ramki, musi zosta wywoana metoda ".
Aby zbudowa ramk, tworzymy klas 3, , jak poniej:
 8 0    !L 
#
8 0  %   &
#
  +  
)  *  + )  , %&
 *   %  &

9

9

Rozdzia 10.

Aplety

567

Konstruktor ramki umieszcza aplet (pochodzcy od klasy (("") wewntrz nowej ramki.
W metodzie " naszego apletu (aplikacji) tworzymy now ramk powyszego typu.
 C
 0 
  !
#
   %&#9

    %  [\&
#
8 0   0
+ 8 0  % C
 0 
%&&
 0  2 %1C
 0 
1&
 0  T%*78;P;)4Q;P;)&
 0  <O  ); %!L 7Y=2J;J).;7&
 0 B %&
9
9

Istnieje jeden problem. Jeeli taki program zostanie uruchomiony przez interpreter Javy, a nie
przez przegldark apletw, i nastpi wywoanie 8 ("4, metoda ta zwrci " ,
poniewa aplet nie znajduje si wewntrz przegldarki. To z kolei spowoduje bd wykonania
programu za kadym razem, gdy interpreter sprbuje wykona kod podobny do nastpujcego:
  )  %&B  %  &

O ile nie chcemy konstruowa caej przegldarki, musimy dostarczy przynajmniej podstawowe elementy umoliwiajce wykonanie takich wywoa. Powysze wywoanie nie wywietli adnej wiadomoci, ale przynajmniej nie spowoduje bdu programu. Okazuje si,
e wszystko, co musimy zrobi, to zaimplementowa dwa interfejsy:  ! i *
("4.
Dziaanie kontekstw apletu ju widziae. S one odpowiedzialne za dostarczanie plikw
graficznych i dwikowych oraz za wywietlanie stron internetowych. Mog rwnie grzecznie odmwi wykonania polecenia i wanie tak bdzie postpowa nasz kontekst apletu.
Gwnym zadaniem interfejsu  ! jest wanie odnalezienie kontekstu apletu. Kady
aplet posiada procedur poredniczc (ang. applet stub; jest ona okrelana przez metod
# ! klasy ).
W naszym przypadku klasa 3, bdzie implementowa zarwno  !, jak
i  ("4. Dostarczamy najmniejsz moliw ilo kodu, jaka pozwala zaimplementowa te dwa interfejsy.
 8 0    !L 
   4 ) 
#

AA  /  
   %&#  9
N8. < K %&# 9
N8. ) K %&# 9
  ,   %  T &# 119
 )    )  %&#  B9
    8T% T04  /0&#9

568

Java 2. Podstawy
AA  / ) 
 )  )%N8.&# 9
=  = %N8.&# 9
   %  T &# 9
7   %&# 9
  B < %N8.&#9
  B < %N8.4 &#9
  B  %  &#9
9

Gdy skompilujesz ten plik, otrzymasz ostrzeenie, e java.awt.Window rwnie zawiera


metod o nazwie #, posiadajc widoczno pakietu. Poniewa nasza klasa nie
znajduje si w tym samym pakiecie co klasa "-(, nie moe przeadowa metody
"-(#. Nie przeszkadza nam ta sytuacja chcemy utworzy now metod
# dla interfejsu  !. Interesujcy jest fakt, e doczenie do podklasy
nowej metody, o tej samej sygnaturze, co jedna z metod nadklasy, jest cakowicie legalne. Jeeli w odniesieniu do obiektu, wewntrz pakietu , bdziemy uywa
referencji Window, wywoana zostanie metoda "-(#. Ale jeeli skorzystamy
z referencji 3, lub  !, wywoana zostanie metoda 3, 
#.

Nastpnie konstruktor ramki wywouje dla apletu metod # !, aby samemu sta si procedur poredniczc apletu.
8 0  %   &
#
  +  
)  *  + )  , %&
 *   %  &

 !
9

Moliwa jest jeszcze jedna sztuczka. Zamy, e chcemy korzysta z kalkulatora rwnoczenie jako apletu i jako aplikacji. Zamiast przenosi metody klasy +, () do klasy
+, (),, skorzystamy z dziedziczenia. Oto kod klasy, ktra tego dokonuje:
 P 0  0 
   P 0 
#
    %  [\&
#
8 0   0
+ 8 0  %  P 0  %&&

9
9

Moesz zastosowa to rozwizanie w kadym aplecie, nie tylko w aplecie kalkulatora. Wszystko,
co musisz zrobi, to wywie klas (, z klasy apletu i w metodzie "
przekaza klasie 3, obiekt ".(/0. W wyniku tego powstanie klasa bdca
rwnoczenie apletem i aplikacj.
Dla zabawy skorzystalimy ze sztuczki, o ktrej wspomnielimy ju wczeniej polega
ona na doczeniu znacznika   jako komentarza w pliku rdowym. Dziki temu moesz
wywoa przegldark apletw dla pliku rdowego (!), omijajc dodatkowy plik HTML.

Rozdzia 10.

Aplety

569

Listingi 10.11 i 10.12 zawieraj kod rdowy. Aby skompilowa program, musisz skopiowa plik ApletKalkulatora.java do tego samego katalogu. Sprbuj uruchomi zarwno
aplet, jak i aplikacj:
  P 0  0 


P 0  0 


Listing 10.11. RamkaApletu.java


 
 
 
   
 
  
 
 
" 
 
$ 
 
'
( 8 0    !L 
-   4 ) 
6#
8 0  %   &
#
  +  
)  *  + )  , %&
" *   %  &
$    % B&
'9
(
-  B %&
6#
   %&
B %&
    %&
9
"
$AA  /  
'   %&#  9
(N8. < K %&# 9
-N8. ) K %&# 9
6  ,   %  T &# 119
 )    )  %&#  B9
    8T% T04  /0&#9

AA  / ) 
" )  )%N8.&# 9
$=  = %N8.&# 9
'   %  T &# 9
(7   %&# 9
-  B < %N8.&#9
6  B < %N8.4 &#9
  B  %  &#9

    
9

570

Java 2. Podstawy

Listing 10.12. KalkulatorApletAplikacja.java


A
!a / S T   P 0  0 

4
TX 0   R  T/ aTT T0%H&
;/0>2C.
  T/
":,,.72);<7+1P 0  0 
 1
$=<2>+66>7=?>2+66@
':A,,.72@
(A
-
6 
 

 P 0  0 

   P 0 
AA2  2 0 
2
   H
"#
$    % [\ &
'#
(8 0   0
-+ 8 0  %  P 0  %&&
6 0  2 %1P 0  0 
1&
 0  T%*78;P;)4Q;P;)&
 0  <O  ); %!L 7Y=2J;J).;7&
 0 B %&
9
"
$ O  *78;P;)+66
' O  Q;P;)+66
(9

Pliki JAR
Aplet kalkulatora z tego rozdziau korzysta z czterech klas: +, (), "+, *
() oraz dwch klas wewntrznych. Wiesz, e znacznik apletu wskazuje na plik klasy,
zawierajcy klas pochodzc od :
:,,.72);<7+1 P 0   1=<2>+66>7=?>2+"6@

Gdy przegldarka wczytuje t lini, czy si z serwerem i pobiera plik ApletKalkulatora.


class. Nastpnie mechanizm adowania klas interpretera Javy, wbudowany w przegldark,
aduje z tego pliku klas +, (). Podczas tego procesu mechanizm adowania
klas musi rozwiza inne klasy, z ktrych korzysta klasa gwna. Gdy tego dokona, wie ju,
jakich jeszcze klas potrzebuje, aby uruchomi aplet. Dlatego te przegldarka musi ponownie
poczy si z serwerem. Wikszo apletw korzysta z wielu klas, a przegldarka internetowa
musi osobno ciga kady z plikw. ciganie apletu przy uyciu powolnego poczenia moe
zaj wiele minut.
Wane, aby zapamita, e czas adowania jest w duej mierze niezaleny od wielkoci klas ich pliki s do mae. Waniejszym powodem jest fakt, e ustanowienie
kadego poczenia z serwerem zabiera dusz chwil.

Rozdzia 10.

Aplety

571

Java obsuguje ulepszon metod adowania plikw klas, ktra pozwala umieci wszystkie
wymagane pliki klas w jednym pliku. Plik ten moe zosta cignity za pomoc jednego
dania HTTP. Pliki archiwizujce pliki klas Javy s nazywane plikami archiwalnymi Javy
(ang. Java Archive files, JAR). Pliki JAR mog zawiera zarwno pliki klas, jak i inne typy
plikw, jak np. obrazy lub pliki dwikowe. Pliki JAR s kompresowane przy uyciu popularnego formatu kompresji ZIP, co dodatkowo redukuje czas adowania.
Aby zbudowa plik JAR, uywasz narzdzia o nazwie ) (jeli wybrae domyln instalacj,
znajdziesz je w katalogu jdk/bin). Najbardziej typowe polecenie tworzce plik JAR ma nastpujc skadni:

 O
 

Dla przykadu:

 OP /P 0  



O

Oglnie rzecz biorc, polecenie ) ma nastpujcy format:

 

Tabela 10.4 zawiera list opcji programu ). S one do podobne do opcji polecenia )
w systemie Unix.
Tabela 10.4. Opcje programu jar
Opcja

Opis

Tworzy nowe, puste archiwum i dodaje do niego pliki. Jeeli ktrakolwiek z podanych nazw
plikw oznacza katalog, program
 rekursywnie przetwarza jego zawarto

Wywietla tabel zawartoci

Aktualizuje istniejcy plik JAR

Wydobywa pliki. Jeeli podae jeden lub wicej nazw plikw, tylko te pliki zostan wydobyte
z archiwum. W przeciwnym wypadku wydobywane s wszystkie pliki

Informuje program, e drugim parametrem jest nazwa pliku JAR. Jeeli ten parametr nie pojawi
si, program
 wypisze wynik w standardowym wyjciu (tworzc plik JAR) lub wczyta dane
ze standardowego wejcia (wydobywajc pliki lub wywietlajc zawarto pliku JAR)

Wywietla opis dziaania programu

Dodaje do pliku JAR manifest. Manifest to opis zawartoci oraz pochodzenia archiwum. Kade
archiwum ma domylny manifest, ale moesz dostarczy wasny, jeeli chcesz powiadczy
autentyczno archiwum. Omwimy to zagadnienie w rozdziale powiconym bezpieczestwu,
w Java 2. Techniki zaawansowane

Zachowuje dane bez uycia kompresji ZIP

Nie tworzy pliku manifestu dla zawartoci archiwum

Tworzy indeks (poniej znajdziesz wicej informacji na ten temat)

Tymczasowo zmienia katalog. Na przykad

 O T ,0!8


E)0 / 

przechodzi do katalogu klasy i z niego pobiera pliki klas

572

Java 2. Podstawy
Gdy ju masz plik JAR, musisz poinformowa o nim przegldark, uywajc znacznika  ,
tak jak w poniszym przykadzie.
:,,.72);<7+1 P 0   1
8)>=I7+1P /P 0  
1
=<2>+66>7=?>2+"6@

Zwr uwag, e atrybut


 nadal musi by obecny. Atrybut
 podaje przegldarce
nazw apletu. 3 %= okrela po prostu plik, w ktrym znajduje si klasa apletu oraz inne
pliki. Kiedykolwiek potrzebna jest klasa, obraz lub plik dwikowy, przegldarka jako pierwsze przeszukuje pliki JAR znajdujce si na licie atrybutu 3 %=. Dopiero gdy okae si,
e wymagany plik nie znajduje si w archiwum, przegldarka sprbuje cign go z serwera.

Manifest
Pliki JAR nie s wykorzystywane wycznie przez aplety. Moesz umieszcza w nich take
aplikacje komponenty programw (czasami nazywane JavaBeans przejd do rozdziau 8.
ksiki Java 2. Techniki zaawansowane) oraz biblioteki. Na przykad, biblioteka wykonawcza
SDK znajduje si w olbrzymim pliku rt.jar.
Plik JAR to po prostu plik ZIP zawierajcy klasy, inne pliki wymagane przez program (takie
jak ikony) oraz plik manifestu opisujcy waciwoci archiwum.
Plik manifestu nosi nazw MANIFEST.MF i znajduje si wewntrz pliku JAR, w specjalnym
podkatalogu META-INF. Minimalna dozwolona zawarto manifestu to po prostu napis:
C O EIF6

Zoone manifesty mog posiada o wiele wicej komrek. Komrki manifestu s pogrupowane
w sekcje. Pierwsz sekcj manifestu jest tzw. sekcja gwna. Odnosi si ona do caego pliku
JAR. Kolejne komrki mog opisywa waciwoci elementw, takich jak poszczeglne pliki,
pakiety lub adresy URL. Komrki w sekcji musz rozpoczyna si od komrki . Poszczeglne sekcje s rozdzielone pustymi liniami, np.:
C O EIF6
  
 F)0 0 
 
 FOA 0A
 

Aby edytowa manifest, umie linijki, ktre chcesz doda do manifestu, w pliku tekstowym.
Nastpnie uruchom co nastpuje:

O
  

Dla przykadu, aby utworzy nowy plik JAR zawierajcy manifest, uruchom:

OC
B 
 O OA
O A
0 A 

Rozdzia 10.

Aplety

573

Aby do manifestu istniejcego pliku JAR doczy nowe elementy, umie je w pliku tekstowym i uyj polecenia:

OC
B 
 O E  0O

Aby dowiedzie si wicej o mechanizmie JAR oraz formacie manifestu, zajrzyj na stron
http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html.
Jeeli Twj aplet jest duy, istnieje szansa, e uytkownicy nie bd uywa wszystkich
jego elementw. Aby zredukowa czas adowania, moesz podzieli kod apletu na wiele
plikw JAR, a do gwnego pliku JAR doda indeks. Mechanizm adowania klas bdzie
dziki temu wiedzia, ktry z plikw JAR zawiera dany pakiet lub zasb. Aby wygenerowa
indeks, musisz w manifecie gwnego pliku JAR okreli atrybut ##* . Nastpnie
uruchom

EC
? / 


Powysze polecenie docza do katalogu META-INF plik INDEX.LIST.

Przechowywanie plikw JAR


Do przechowywania plikw JAR przegldarki domylnie uywaj swojej pamici podrcznej.
Tak wic, jeeli powrcisz do strony zawierajcej aplet, a przegldarka wci bdzie przechowywa odpowiedni plik JAR w pamici podrcznej, nie zostanie on ponownie cignity
z serwera. To dobre rozwizanie, ale pami podrczna przegldarki nie jest tak pomocna,
jakby chcieli tego programici apletw. Na przykad, jeeli raz w miesicu odwiedzasz stron
zawierajc aplet rozliczajcy wydatki, prawdopodobnie za kadym razem bdziesz musia
pobiera go od nowa.
Java Plug-In obsuguje mechanizm czynicy aplety bardziej wytrzymaymi. Jeeli chcesz,
aby aplet pozosta po stronie uytkownika przez duszy okres czasu, skorzystaj ze sw kluczowych  %?

,  %?3 %= i  %?=3
.
Powysze sowa kluczowe musz sta si parametrami lub atrybutami zalenie od tego,
czy uywasz znacznika
 , czy  , w nastpujcy sposb:
:;K!7)2@
:,8CC7+18)>=I71I.N7+11@

:,8CC7+1))>7J;,2=;1I.N7+11@
:,8CC7+1))>7J8)>=I71I.N7+11@
:,8CC7+1))>7JI78=;1I.N7+11@
:A;K!7)2@

lub
:7CK7<
8)>=I7+11
))>7J;,2=;+11
))>7J8)>=I7+11
))>7JI78=;+11

@

574

Java 2. Podstawy
Sowo kluczowe  %?

 moe przyjmowa trzy wartoci:
 (

nie przechowuj apletu w pamici podrcznej.

 )(#)
  8"

pozwl przechowywa aplet przegldarce (domylnie).

pozwl przechowywa aplet Java Plug-In.

Plik JAR powinien znajdowa si na licie atrybutu 3 %= lub  %?3 %=, ale nie
na obydwu rwnoczenie.

Para  %?=3
/warto jest opcjonalna. Wartoci jest lista numerw wersji, odpowiadajcych plikom JAR na licie  %?3 %=, ktre reprezentuj wymagane wersje plikw
JAR. Jeeli na komputerze klienta znajduj si odpowiednie wersje, to znaczy, e nie trzeba
ich pobiera. Jeeli numery wersji nie zostay okrelone, w porwnaniu uywane s daty
plikw JAR. Numerw wersji musisz uywa, gdy przechowujesz pliki JAR otrzymane za
pomoc SSL, poniewa w takich sytuacjach data ostatniej modyfikacji jest niedostpna dla
Java Plug-In.
Aby dowiedzie si wicej o przechowywaniu apletw, zajrzyj na http://java.sun.com/products/
plugin/1.3/docs/appletcaching.html.

Autonomiczne pliki JAR


Do tej pory omawialimy pakowanie apletw w pliki JAR. W przypadku apletw format JAR
jest wykorzystywany gwnie do zredukowania liczby plikw, jakie przegldarka musi
cign, uywajc osobnych da HTTP. Jednak pliki JAR s przydatne rwnie w dystrybucji aplikacji, gdy zmniejszaj liczb plikw zamiecajcych komputery uytkownikw.
Po prostu umie wszystkie pliki aplikacji w pliku JAR i docz do manifestu komrk opisujc gwn klas Twojego programu klas, ktr normalnie podaby, wywoujc interpreter .
Utwrz plik, powiedzmy, klasaglowna.mf, zawierajcy nastpujc linijk:
C E) FA
 0 A8 0 ? 

Nie dodawaj rozszerzenia ## do nazwy gwnej klasy. Nastpnie uruchom program ):

 OC
, 
0    O

Uytkownicy mog teraz uruchamia Twj program w nastpujcy sposb:

E
C
, 


Zasoby
Klasy, uywane zarwno w apletach, jak i w aplikacjach, czsto korzystaj z przyporzdkowanych sobie plikw danych, takich jak:


pliki graficzne i dwikowe,

Rozdzia 10.

pliki tekstowe, zawierajce acuchy wiadomoci i etykiety przyciskw,

pliki binarne, opisujce np. map.

Aplety

575

W Javie taki przyporzdkowany plik nazywany jest zasobem.


W systemie Windows termin zasb ma bardziej konkretne znaczenie. Zasoby Windows rwnie zawieraj obrazy, etykiety przyciskw itd., ale s one poczone z plikiem
wykonywalnym i mona mie do nich dostp poprzez standardowy interfejs programowania. W przeciwiestwie do tego, zasoby Javy s przechowywane w osobnych plikach,
nie jako cz plikw klas. Kada klasa z osobna okrela sposb dostpu i interpretacj
danych zasobu.

Dla przykadu, spjrzmy na klas ""'() wywietlajc wiadomo, np. tak jak
na rysunku 10.15.
Rysunek 10.15.
Wywietlanie
zasobu pochodzcego
z pliku JAR

Oczywicie, tytu ksiki i rok uzyskania praw autorskich zmieni si wraz z nastpn edycj
ksiki. Aby mona byo atwo wyledzi t zmian, umiecimy tekst wewntrz pliku, zamiast
zapisa go w programie jako acuch.
Ale gdzie powiniene umieci plik informacja.txt? Oczywicie, najbardziej wygodnym rozwizaniem byoby umieszczenie go w tym samym miejscu, co inne pliki, czyli np. w pliku JAR.
Mechanizm adowania klas wie, jak odszuka pliki klas, o ile ich lokalizacja jest zapisana
w ciece dostpu, albo te znajduj si w archiwum lub na serwerze. Mechanizm zasobw daje
Ci t sam wygod w przypadku plikw, ktre nie s plikami klas. Oto, co musisz zrobi:
1. Pobierz obiekt typu ## klasy, ktra korzysta z danego zasobu, np.
""'()##.
2. Wywoaj 83#( )/"$, 0, aby otrzyma lokalizacj zasobu w formie

adresu URL.
3. Jeeli dany zasb jest obrazem lub plikiem dwikowym, wczytaj go bezporednio,
za pomoc metody 88 lub 8 -( .
4. W przeciwnym wypadku wywoaj metod (") dla obiektu URL, aby zaadowa

dane tego pliku (aby dowiedzie si wicej o strumieniach danych, przejd do


rozdziau 12.).

576

Java 2. Podstawy
Sztuczka polega na tym, e mechanizm adowania klas pamita, gdzie znajduje si klasa, i moe
sprbowa odszuka zasb w tym samym katalogu.
Dla przykadu, aby zbudowa ikon zawierajc obraz z pliku informacja.gif, napisz nastpujce linijki:
N8.+, =O 
  8%1O 
O1&
= =0 + = =%&

Oznacza to odszukaj plik informacja.gif w tym samym miejscu, w ktrym znalaze "*
"'()##.
Aby wczyta plik informacja.txt uywasz analogicznych instrukcji:
N8.+, =O 
  8%1O 
  1&
=    +  %&

Poniewa powysza kombinacja wywoa jest do popularna, napisano dla niej skrt metoda
83#( )#) zwraca " ), a nie URL.
=    +, =O 
  8  %1O 
  1&

Aby wczyta dane ze strumienia, musisz wiedzie, w jaki sposb obsugiwa proces wejcia
(w rozdziale 12. znajdziesz szczegy). W naszym przykadowym programie sczytujemy ze
strumienia po jednej linii naraz, uywajc poniszych instrukcji:
=    +, =O 
 
 8  %1O 
  1&
KOO 8  T/ + KOO 8 %
=   8 % &&
  
B%% + T/  .%&&H+&
T 20  /  % ]1G1&

Na pycie CD znajdziesz plik JAR zawierajcy wszystkie pliki klas tego przykadu oraz pliki
zasobw informacja.gif i informacja.txt. Dziki temu moemy zademonstrowa, w jaki sposb
aplet lokalizuje plik zasobu w tym samym miejscu, co plik klasy, czyli wewntrz pliku JAR.
Jak przekonae si w poprzednim rozdziale, w pliku JAR moesz umieci obrazy oraz
pliki dwikowe i operowa na nich za pomoc metod 88 i 8 -(  metody
te automatycznie przeszukuj pliki JAR. Ale jeeli chcesz zaadowa z archiwum JAR inne
pliki, musisz skorzysta z metody 83#( )#).

Zamiast umieszcza plik zasobu w tym samym katalogu, co plik klasy, moesz umieci go
w podkatalogu. Moesz skorzysta z hierarchicznej nazwy zasobu, takiej jak
A 0 AO 
 

Jest to relatywna nazwa pliku, interpretowana wzgldem pakietu klasy, ktra aduje zasb.
Zwr uwag, e zawsze musisz uywa separatora , niezalenie od tego, jakiego separatora
uywa do rozdzielania katalogw Twj system operacyjny. Na przykad w Windows mechanizm
adowania zasobw automatycznie zamieni separatory  na 5.

Rozdzia 10.

Aplety

577

Nazwa zasobu, rozpoczynajca si od , nazywana jest absolutn nazw zasobu. W takim


wypadku zasb jest lokalizowany w taki sam sposb, w jaki lokalizowana byaby klasa
znajdujca si wewntrz pakietu. Dla przykadu, zasb
A
A /  

znajduje si w katalogu corejava (ktry moe by wpisany w ciek dostpu, znajdowa


si wewntrz pliku JAR lub na serwerze).
Mechanizm adowania zasobw pozwala jedynie na automatyzacj procesu adowania plikw.
Nie istniej standardowe metody interpretujce zawarto pliku zasobu. Kady aplet sam musi
implementowa interpretacj zawartoci swoich zasobw.
Innym popularnym zastosowaniem zasobw jest internacjonalizacja apletw i aplikacji. Zalene
od uywanego jzyka acuchy, takie jak wiadomoci i etykiety interfejsu uytkownika, s
przechowywane w plikach zasobw jeden plik przypada na jeden jzyk. Internacjonalizacja
API, ktr omawiamy w rozdziale 10. ksiki Java 2. Techniki zaawansowane, obsuguje
standardowe metody organizowania i dostpu do tych plikw.
Listing 10.13 zawiera kod HTML testujcy adowanie zasobw; listing 10.14 zawiera kod Javy.
Listing 10.13. TestZasobow.html
:,,.72);<7+12 *   1
=<2>+66>7=?>2+66
8)>=I7+12 *  
1@
:A,,.72@

Listing 10.14. TestZasobow.java


 
 
 
   
 

 
 
" 
 
$
' 2 *    !
(#
-   %&
6#
)  *  + )  , %&
 *   % , =O 
%&&
9
9
"
$A
', T 
X/T  0  /T/0=O 
 5W
(T/0  
 /ST  0   0 B TX/TT 
-A
6 , =O 
  !2 
#
, =O 
%&
#
 . / % K . / %&&
"
$AA SXTT  0  /

578

Java 2. Podstawy
'T 20  /+ !2  %&
( % !, %T 20  /&4K . / )7278&
-
6AA SXTT/0=O 

N8.=O 
+, =O 
  8%1O 
O1&
!K T/0=O 
+ !K %1=O 
14
 = =%=O 
&&
T/0=O 
  . % ,O %&&
" %T/0=O 
4K . / ;N2>&
$9
'
( !2  T 20  /
-
6  ,O   . 
#
    ,O % 7  T T&
#
 /
"#
$AA T/
 0 TT  T  0  /
'=    +, =O 
 
( 8  %1O 
  1&
-KOO 8  T/ + KOO 8 %
"6=   8 % &&
"  
" B%% + T/  .%&&H+&
"T 20  /  % ]1G1&
"9
"" B%=;7  /
0&
"$#
"' /
0  02 %&
"(9
"-9
$69
$9



 73.83#( )/)"8."$0
 " ).83#( )#)/)"8."$0.odszukuje

zasb w tym samym


katalogu, w ktrym znajduje si aktualna klasa, a nastpnie zwraca adres URL lub
strumie wejcia, z ktrych moesz korzysta podczas adowania zasobu. Obydwie
metody zwracaj " , jeeli zasb nie zosta odnaleziony, tak wic nie zwracaj
wyjtku bdu wejcia-wyjcia.
Parametry: $

nazwa zasobu.

Pakiety opcjonalne
Jak widziae, pliki JAR przydaj si do archiwizowania zarwno apletw, jak i aplikacji.
Czsto s rwnie wykorzystywane do archiwizacji bibliotek kodu rdowego. Moesz
doczy do pliku JAR zbir klas i udostpni te klasy, dodajc ten plik do cieki dostpu.

Rozdzia 10.

Aplety

579

W przypadku czsto wykorzystywanych bibliotek kodu rdowego moesz omin ten drugi
krok, zamieniajc plik JAR w pakiet opcjonalny.
W pocztkowych wersjach J2SE pakiety opcjonalne byy nazywane rozszerzeniami.
Termin pakiet jest troch mylcy pakiet opcjonalny moe zawiera klasy pochodzce
z rnych pakietw jzyka programowania Java.

Sekcja gwna manifestu pakietu opcjonalnego opisuje zawarto archiwum. Oto przykad:
7 E F
O 
TTT
O EI FC
L 
O +IF6
= EI E= F
O
= EI FC
L 
= EIF6

Nazwa rozszerzenia jest dowolna. Tak jak w przypadku pakietw jzyka Java, moesz zapewni unikalno rozszerzenia, uywajc odwrconej nazwy domeny.
Program wymagajcy rozszerze opisuje je w sekcji gwnej swojego manifestu:
7 E. F
TT

TE7 E F
O 
TTT

TEO EIF6

TE= EIF6

TE= EI E= F
O
TE7 E FB  
TEO EIF6

Ta konkretna aplikacja potrzebuje dwch pakietw opcjonalnych, ktrym nadalimy aliasy


()($ i "")($. Linijka alias*4"#("* podaje nazw aktualnego rozszerzenia.
Aplikacja informuje w ten sposb, e potrzebuje pakietu ()($, zgodnego ze specyfikacj
1.0 lub pniejsz i implementacj 1.0.1 lub pniejsz, oraz nalega, aby wymagany pakiet
zosta zaimplementowany przez okrelonego dostawc. W przypadku drugiego rozszerzenia
program wymaga jedynie, aby byo ono zgodne ze specyfikacj 2.0 lub nowsz. Implementacja
i dostawca nie graj roli.
Gdy program zostanie uruchomiony, bdzie musia znale swoje pakiety opcjonalne. Pakiet
opcjonalny JAR moe po prostu zosta umieszczony w katalogu jre/lib/ext. Program moe
rwnie poda adres URL, spod ktrego pakiet opcjonalny zostanie pobrany, jak np.
E= EN8.FB FAA 
O A 0 A
TTT


Aby dowiedzie si wicej o pakietach opcjonalnych, zajrzyj na http://java.sun.com/j2se/1.3/


docs/guide/extensions/index.html.

Piecztowanie
W rozdziale 4. wspomnielimy, e moesz zapiecztowa pakiet jzyka Java, aby upewni si,
e nie zostan do niego doczone adne nowe klasy. Piecztowanie zabezpiecza elementy
o widocznoci pakietu. Aby to osign, umieszczasz wszystkie klasy pakietu w pliku JAR.

580

Java 2. Podstawy
Jednak domylnie pakiety w plikach JAR nie s piecztowane. Moesz zmieni to domylne
zachowanie, umieszczajc linijk
  F 

w sekcji gwnej manifestu archiwum. Moesz rwnie okreli, czy poszczeglny pakiet ma
zosta zapiecztowany, dodajc do pliku JAR osobn sekcj, tak jak:
 FA
O A
 0 A
  F 
 FAB A A
  FO 

Aby zapiecztowa pakiet, utwrz plik tekstowy zawierajcy instrukcje manifestu. Nastpnie
uruchom program JAR:

 OC
, 0 
TO

W ten sposb koczymy omawianie apletw. W nastpnym rozdziale dowiesz si, jak uywa
mechanizmu wyjtkw, aby informowa swoje programy, co maj robi, jeli w czasie wykonywania wystpi problemy. Damy Ci rwnie kilka wskazwek i omwimy techniki testowania
i debugowania programw pomagajce zmniejszy liczb sytuacji, w ktrych Twoje programy
nie bd dziaay prawidowo.

You might also like