R 15 07 (2)


Rozdział 15.
Wykorzystywanie Javy
Język JavaScript może rozszerzyć możliwości funkcjonalne Twoich stron WWW.
Potencjalne możliwości języka JavaScript są jednak bardzo poważnie ograniczane przez
same przeglądarki. Jak można sądzić po nazwie, JavaScript nie jest językiem
programowania ogólnego przeznaczenia, lecz raczej językiem skryptowym, którego
celem jest rozszerzanie możliwości przeglądarki i kontrolowanie elementów stron
WWW.
Jeśli jednak potrzebujesz czegoś innego  zupełnie nowych możliwości
funkcjonalnych na stronach WWW  powinieneś zainteresować się Javą, językiem, na
którym wzorowany jest JavaScript. Mówiliśmy już o Javie w rozdziale 13. 
 Multimedia: dodawanie dzwięków, obrazów wideo i innych elementów
multimedialnych , przy okazji omawiania animacji. W tym rozdziale zajmiemy się
następującymi zagadnieniami:
co to jest Java,
programowanie w Javie,
umieszczanie apletów na stronach WWW.
Czym jest Java?
Java została stworzona przez niewielką grupę pracowników firmy Sun Microsystems.
W początkach swojego istnienia Java, zwana wtedy OAK, projektowana była jako język
programowania, przeznaczony dla interaktywnych kontrolerów zwanych PDA (ang.
Portable Data Assistant) oraz dla przemysłu telewizyjnego. Cechą, która wyróżniała ten
język był fakt, iż można go było wykorzystać w niemal wszystkich elektronicznych
urządzeniach użytkowych i zaprogramować je tak, by wykonywały potrzebne
czynności. Po kilku latach użytkowania Javy w różnych projektach (począwszy od
sprzętu elektronicznego domowego użytku, a skończywszy na urządzeniach do obsługi
wideo), Bill Joy (jeden z twórców firmy Sun) zdał sobie sprawę z tego, iż Java jest
doskonałym narzędziem do tworzenia programów działających w Internecie i na
WWW.
Dowodem na przydatność Javy jako języka programowania przeznaczonego na potrze-
by Internetu była przeglądarka HotJava, posiadająca wszystkie standardowe cechy
434 Część 5. Multimedia i aplety Javy
przeglądarek WWW, jednakże różniąca się od nich tym, że w całości została napisana
w Javie. Prócz tego, HotJava była w stanie ładować i wykonywać niewielkie programy
napisane w Javie, wykonywane wewnątrz stron WWW i rozszerzające standardowe
możliwości języka HTML, szczególnie w zakresie animacji i interakcji z użytkowni-
kiem. Właśnie te możliwości tak bardzo zainteresowały znaczną część osób związanych
z przemysłem internetowym.
Język Java
Te informacje historyczne na temat Javy będą musiały Ci wystarczyć, teraz bowiem
zastanowimy się, czym jest Java oraz dlaczego możesz chcieć jej używać.
Java jest obiektowym językiem programowania, wzorowanym i podobnym do języka
C++. Od samego początku Java projektowana była jednak z myślą o tym, aby język ten
miał jedną charakterystyczną cechę, odróżniającą go od wszystkich innych języków
programowania. W  świecie Internetu istnieją bardzo różne systemy komputerowe,
wykorzystujące rozmaite systemy operacyjne. Powoduje to, że programy pisane w
takich językach jak C++ i wykorzystujące funkcje internetowe muszą być pisane
specjalnie dla konkretnego systemu operacyjnego. W konsekwencji, nie można sięgnąć
po program napisany w języku C++, przeznaczony dla komputerów Macintosh, i
uruchomić go na komputerze PC, wykorzystującym system operacyjny Windows 95.
Java jednakże została zaprojektowana w taki sposób, aby podobne migracje programu
były możliwe. W tym celu programy Javy są kompilowane do specjalnej postaci
(zwanej kodami bajtowymi), która może być wykorzystywana na dowolnych
komputerach, umożliwiających w ogóle uruchamianie programów Javy.
Jeśli nie miałeś jeszcze kontaktu z problematyką programowania, to pojęcie
kompilacji może być dla Ciebie nowe. W odróżnieniu od HTML-a oraz JavaScriptu,
programy napisane w języku Java nie mogą być tak po prostu wczytane do
przeglądarki i wykonane. Przedtem będziesz musiał uruchomić specjalny program
zwany kompilatorem Javy, który skonwertuje (lub skompiluje) kod zródłowy
programu do specjalnej postaci umożliwiającej jego wykonanie.
Aplety pisane w Javie
Drugą główną cechą Javy jest możliwość pisania programów wykonywanych na
stronach WWW. Używając standardowych metod wymiany danych między
przeglądarką i serwerem, można przekazywać pomiędzy różnymi systemami
komputerowymi programy napisane w Javie. Programy te mogą być wykonywane na
dowolnych komputerach, gdyż nie istnieją żadne ograniczenia limitujące typ
komputera, na który programy mogą zostać przekazane. Nazywane są one apletami.
Aplet jest programem (zazwyczaj niedużym) napisanym w Javie, który może być
dołączony do strony WWW. Gdy strona jest przekazywana z serwera do przeglądarki,
umożliwiającej wykonywanie programów napisanych w Javie, aplet przekazywany
jest wraz z nią i wykonywany.
Rozdział 15. Wykorzystywanie Javy 435
Aby obsługiwać aplety, będziesz potrzebował specjalnej przeglądarki, która to
umożliwia. Netscape Navigator 2.0 była pierwszą przeglądarką mogącą wykonywać
programy napisane w Javie. Od tego czasu coraz więcej firm wykupiło licencję na
stosowanie Javy, i wbudowało w swoje przeglądarki możliwość obsługi apletów.
Aktualnie przeglądarkami umożliwiającymi wykonywanie apletów są Netscape
Communicator oraz Microsoft Internet Explorer.
Do czego można użyć Javy?
Ogólnie rzecz biorąc, nie ma wielu ograniczeń limitujących możliwości apletów oraz
aplikacji napisanych w Javie. Najpoważniejszym ograniczeniem jest wyobraznia pro-
gramistów. Jednak, wziąwszy pod uwagę aplety, jakie możemy znalezć na WWW, to
wniosek, że z Internetu korzystają bardzo pomysłowe osoby, jest trafny.
Programy pisane w języku Java należą zazwyczaj do jednej z dwóch kategorii:
apletów oraz aplikacji. Aplikacje są całkowicie niezależnymi programami i mogą być
wykonywane poza przeglądarką WWW. W tym rozdziale nie będziemy jednak mówili
o aplikacjach, skupimy się całkowicie na apletach.
W tym miejscu przedstawimy przykłady kilku apletów, tak abyś mógł zobaczyć, co
można zrobić za pomocą Javy.
Aby oglądać aplety napisane w Javie, będziesz potrzebował specjalnej przeglądarki,
na przykład, aktualnych wersji przeglądarek Internet Explorer oraz Netscape
Navigator.
Gamelan
Jeśli chcesz lepiej poznać możliwości oferowane przez Javę, wyświetl w swojej prze-
glądarce stronę znajdującą się pod adresem http://www.gamelan.com/. Strona ta została
przedstawiona na rysunku 15.2. Jest to witryna zawierająca spis witryn wykorzystują-
cych Javę. Możesz tam również znalezć obszerną kolekcję apletów; dzięki niej będziesz
mógł zorientować się, jak wiele jest powodów, dla których aplety Javy coraz częściej są
dołączane do witryn WWW.
436 Część 5. Multimedia i aplety Javy
Rysunek 15.2.
Gamelan
Niektóre z tych powodów podano poniżej:
wszelkiego typu gry,
rozszerzone możliwości graficzne, w tym głównie wielokolorowe, animowane
napisy,
interakcja z narzędziami 3D, takimi jak VRML,
symulacje,
arkusze kalkulacyjne oraz bardziej zaawansowane obliczenia matematyczne,
pozyskiwanie danych  na bieżąco .
Netscape i Sun
Zarówno firma Netscape, jak i Sun posiadają własne witryny WWW zawierające wyka-
zy dostępnych apletów oraz wiele różnych informacji dotyczących Javy. Stronę WWW
firmy Netscape poświęconą tej tematyce możesz znalezć pod adresem http://developer.
netscape.com/tech/java/index.html. Znajdziesz na niej odwołania do wszelkich informa-
cji dotyczących języka Java i związanych z firmą Netscape, jak również połączenia
z innymi zasobami związanymi z tym językiem.
Główna strona WWW języka Java,  Source for Java Technology , firmy Sun znajduje
się pod adresem http://java.sun.com. Jak widać na rysunku 15.3, strona ta zawiera naj-
bardziej aktualne i szczegółowe informacje dotyczące wszelkich aspektów wykorzysta-
nia Javy i stanowi podstawowe zródło narzędzi programistycznych używanych przy
tworzeniu programów w Javie oraz dokumentacji języka.
Rozdział 15. Wykorzystywanie Javy 437
Rysunek 15.3.
Strona WWW
poświęcona Javie
Programowanie w Javie
Ze względu na wielkość oraz stopień skomplikowania takiego języka programowania
jak Java, omówienie wszystkich związanych z nim zagadnień wykracza daleko poza
ramy niniejszej książki. Z tego względu, zamiast zajmować się wszystkimi technikami
programistycznymi, w tej części rozdziału skupimy się na podstawowych zagadnieniach
tworzenia apletów. Proces ten prześledzimy na przykładzie apletu symulującego
w Javie działanie paska Marquee, znanego z języka HTML i opisanego w rozdziale 13.
Dzięki temu będziesz mógł dokładniej poznać możliwości Javy.
Jeśli chcesz dokładniej poznać sposób działania języka Java, to skorzystaj z jego
pełnej dokumentacji stworzonej przez firmę Sun Microsystems, która znajduje się
na CD-ROM-ie dołączonym do tej książki. Aby posłużyć się tą dokumentacją,
będziesz musiał zainstalować program Adobe Acrobat Reader, znajdziesz go także na
CD-ROM-ie w wersjach przeznaczonych dla systemów Macintosh oraz Windows.
Jeśli poszukujesz książki poświęconej w całości zagadnieniom wykorzystania języka
Java, to polecam książkę  Java 1.1 wydaną również przez wydawnictwo HELION.
Java Development Kit (JDK)
Zanim zaczniesz tworzyć swoje własne aplety w Javie, będziesz musiał zdobyć odpo-
wiednie narzędzia programistyczne, takie jak Java Development Kit firmy Sun, Java
Workshop firmy JavaSoft, Visual Java firmy Symantec, Visual J++ firmy Microsoft,
SuperCede for Java firmy Assymetrix lub Roster firmy Natural Inteligence. Z wyjąt-
kiem JDK firmy Sun (który jest dostępny bezpłatnie), wszystkie pozostałe programy są
438 Część 5. Multimedia i aplety Javy
produktami komercyjnymi i będziesz musiał je legalnie zakupić.
Wymienione powyżej narzędzia będą zawierały wszystko, czego potrzebujesz, aby
skompilować programy napisane w języku Java. Dodatkowo będziesz mógł znalezć
w nich aktualne biblioteki klas, aplikację służącą do przeglądania apletów bez koniecz-
ności uruchamiania przeglądarki oraz narzędzia do testowania programów i odszukiwa-
nia błędnych fragmentów kodu.
W obiektowym stylu programowania, klasa jest podstawową jednostką strukturalną
tworzącą szkielet całego programu. Klasa może przypominać nieco bibliotekę
gotowych do użycia instrukcji lub szablon, którego możliwości możesz rozszerzyć,
aby stworzyć nowe klasy lub całe aplikacje. Choć nie będziesz musiał rozumieć
wszystkich pojęć obiektowego stylu programowania, aby móc zacząć pisać programy
w Javie, to jednak dobra książka omawiająca te zagadnienia może być bardzo
przydatna. Wszystkie potrzebne informacje będziesz mógł znalezć we wspomnianej
już wcześniej książce  Java 1.1 .
Jeśli do pisania programów w Javie zechcesz używać bardziej wyrafinowanych, komer-
cyjnych narzędzi programistycznych, będziesz musiał je kupić. Na szczęście dla tych,
którzy nie dysponują wystarczającą ilością środków finansowych, istnieje jeszcze JDK
firmy Sun, które bezpłatnie można skopiować z WWW i zainstalować na własnym
komputerze.
Aby zdobyć najnowszą wersję JDK, wyświetl w przeglądarce stronę WWW pod adre-
sem http://java.sun.com/j2se/1.3/ (patrz rysunek 15.4). Aktualnie dostępne są wersje
JDK przeznaczone dla systemów operacyjnych Windows 95/98, Windows NT, Macin-
tosh, SPAC/Solaris 2.3, 2.4 oraz 2.5.
Rysunek 15.4.
Strona WWW
poświęcona
Java Development Kit
Ćwiczenie 15.1: Tworzenie apletu Ticker
Po zdobyciu jakiegokolwiek narzędzia do tworzenia programów w Javie, będziesz mógł
Rozdział 15. Wykorzystywanie Javy 439
zacząć pisać swoje własne aplety. Programy w Javie możesz pisać, używając normalne-
go edytora tekstowego lub dowolnego innego edytora do tworzenia oprogramowania.
Użyty program nie ma w zasadzie znaczenia, gdyż kod programów pisanych w Javie
jest normalnym tekstem, podobnie jak kod HTML. Przed uruchomieniem edytora
stwórz nową kartotekę, w której zostaną umieszczone pliki apletu. Następnie otwórz
edytor, utwórz w nim nowy plik o nazwie Ticker.java. (Zwróć uwagę na to, aby rozpo-
cząć nazwę od dużej litery  T  pamiętaj, że w Javie wielkość liter ma znaczenie).
Szkielet apletu
Ze względu na fakt, iż Java jest językiem obiektowym, praca nad apletami polega na
dodawaniu nowych możliwości funkcjonalnych do standardowego szkieletu apletów,
dostępnego w JDK. Z tego powodu, podstawowa struktura wszystkich apletów Javy jest
bardzo podobna. Przedstawiamy ją poniżej na przykładowym aplecie:
/* Ćwiczenie  Ticker.class */
import java.applet.*;
import java.awt.* ;
public class Ticker extends Applet implements Runnable {
Tu znajdują się dodatkowe czynności
}
Pierwsza linia powyższego przykładu jest komentarzem opisującym nazwę apletu. Jaki-
kolwiek tekst umieszczony pomiędzy sekwencjami znaków /* i */ jest traktowany jako
komentarz i ignorowany.
Następne dwie linie kodu, rozpoczynające się od słowa import, użyte zostały w celu
poinformowania kompilatora o dodatkowych bibliotekach klas używanych przez aplet.
Wszystkie aplety korzystają z metod umieszczonych w bibliotece java.applet.*; je-
śli dodatkowo będziesz chciał wyświetlać jakiekolwiek informacje na powierzchni aple-
tu, będziesz musiał dołączyć także bibliotekę java.awt.*.
Czwarta linia kodu zawiera właściwą definicję tworzonej przez Ciebie, nowej klasy
apletu. W tej linii deklarujesz nazwę nowego apletu  public class Ticker. Sło-
wa extends Applet informują system, na jakiej klasie bazuje tworzona klasa. Ponie-
waż nasz przykładowy aplet będzie mógł być wykonywany cały czas, bez przerwy, bę-
dziesz musiał zdefiniować specjalny pakiet o nazwie Runnable  służą do tego słowa:
implements Runnable.
Upewnij się, że słowo Ticker podałeś, używając liter tej samej wielkości, co
w nazwie pliku Ticker.java. Jeśli litery w nazwie klasy oraz nazwie pliku nie będą
identycznej wielkości, to podczas kompilowania programu kompilator Javy zgłosi
błąd.
440 Część 5. Multimedia i aplety Javy
Deklarowanie zmiennych
Poniżej definicji klasy, będziesz musiał zdefiniować zmienne wykorzystywane w aple-
cie. Podobnie jak w większości innych języków obiektowych, także i w Javie wykorzy-
stywane są różne typy danych. Oznacza to, iż podczas deklarowania zmiennej będziesz
musiał określić typ wartości, które będą mogły być w niej przechowywane.
Poniżej zadeklarowane zostały zmienne, które będą dostępne w całej tworzonej klasie.
Dodaj poniższy kod do tworzonego pliku:
public class Ticker extends Applet implements Runnable {
Thread tkthread = null;
String tktext = "Ćwiczenie  taśma telegrafu";
/* Domyślny tekst */
int tkspd = 1; /* Domyślna prędkość przesuwu (najwolniej = 1) */
String tkfname = "TimesRoman"; /* Domyślna nazwa czcionki */
int tkfsz = 12; /* Domyślny rozmiar czcionki */
Font tkfont = null; /* Uchwyt do czckonki */
String tkdirection = "Left"; /* Domyślny kierunek przesuwu */
Dimension tksize = null; /* Uchwyt do określenia wielkości */
int tktextwth = 0; /* Szerokość tekstu */
int tktexthgt = 0; /* Wysokość tekstu */
int tkpos = -63000; /* Pozycja */
Metoda init()
Wewnątrz każdej klasy można stworzyć dowolną ilość procedur zwanych metodami.
Metody określają wszelkie czynności, które mogą być wykonywane przez klasę.
Wszystkie klasy posiadają metodę init(), wywoływaną w momencie tworzenia no-
wych obiektów danej klasy. Używana jest do określania początkowych wartości zmien-
nych. W bazowej klasie apletu także została zadeklarowana metoda init(). Jednakże
metoda init() naszego przykładowego apletu będzie musiała wykonać znacznie wię-
cej czynności, a więc musisz stworzyć nową wersję tej metody.
Poniżej przedstawiony został kod definiujący metodę init(), wykorzystywaną w aple-
cie Ticker, który określa początkowe wartości używanych w nim zmiennych:
/* Deklaracja metody init() */
public void init() {
/* Deklaracja zmiennnych używanych tylko w tej metodzie */
String getval = null;
/* Pobranie z dokumentu HTML wyświetlanego tekstu */
getval = getParameter("tktext");
/* Jeżeli tekst nie jest zdefiniowany, używamy domyślnego */
tktext = (getval == null ) ? tktext : getval;
/* Pobranie z dokumentu HTML prędkości przesuwu */
getval = getParameter("tkspd");
/* Jeżeli prędkość nie jest zdefiniowana, używamy domyślnej */
tkspd = (getval == null ) ? tkspd :
(Integer.valueOf(getval).intValue());
Rozdział 15. Wykorzystywanie Javy 441
/* Pobranie z dokumentu HTML czcionki */
getval = getParameter("tkfname");
/* Jeżeli czcionka nie jest zdefiniowana, używamy domyślnej */
tkfname = (getval == null) ? tkfname : getval ;
/* Pobranie z dokumentu HTML wielkości czcionki */
getval = getParameter("tkfsz");
/* Jeżeli wielkość nie jest zdefiniowana, używamy domyślnej */
tkfsz = (getval == null ) ? tkfsz :
(Integer.valueOf(getval).intValue());
/* Definicja klasy czcinki, oparta na jej nazwie i wielkości */
tkfont = new java.awt.Font( tkfname, Font.PLAIN, tkfsz ) ;
/* Sprawdzenie, czy parametr tkreverse jest ustalony */
/* Jeżeli nie: tkdirection = Left; tkpos = duża ujemna wartość*/
/* W przeciwnym wypadku: tkdirection = Right; */
/* tkpos = duża dodatnia wartość */
getval = getParameter("tkreverse");
tkdirection = "Left";
tkpos = -63000 ;
if ( getval != null ) {
if ( getval.equalsIgnoreCase( "Yes") ) {
tkdirection = "Right";
tkpos = 63000;
}
}
/* Ustawienie koloru tła appletu na biały */
this.setBackground( Color.white );
}
Komentarze umieszczone w poniższym kodzie nie są konieczne do poprawnej pracy
tworzonego apletu. Służą one jedynie do wyjaśnienia znaczenia poszczególnych linii
kodu. Jeśli nie chcesz, nie musisz ich zapisywać. Na końcu tego ćwiczenia znajdziesz
kompletny kod przykładu, z którego usunięto wszystkie komentarze; możesz z niego
korzystać.
Upewnij się, że wpisałeś otwierający ({) i zamykający (}) nawias klamrowy . Nawiasy
te używane są w Javie do oznaczania początku i końca bloków kodu; bez nich
kompilator Javy zupełnie się pogubi.
Metody start()i stop()
Metoda start() wywoływana jest w momencie uruchamiania apletu, metoda stop()
podczas jego zatrzymywania.
W tym ćwiczeniu metoda start() zostanie stworzona od początku, gdyż nasz przy-
kładowy aplet ma być odrębnym zadaniem, obsługiwanym niezależnie do wszelkich in-
nych programów wykonywanych na komputerze w tym samym czasie. Takie postępo-
wanie pozwoli systemowi operacyjnemu znacznie lepiej wykorzystać posiadane zasoby
i rozdzielić je pomiędzy wszystkie zadania. Gdybyśmy nie postąpili w ten sposób, ist-
niałoby poważne zagrożenie, że program, taki jak Ticker, mógłby poważnie utrudnić
wykonywanie pozostałych zadań.
Jednakże, po zdefiniowaniu apletu Ticker jako niezależnego zadania lub wątku, bę-
442 Część 5. Multimedia i aplety Javy
dziesz musiał nauczyć się zatrzymywać rozpoczęty aplet, gdy nie będzie on już po-
trzebny. Do tego właśnie wykorzystamy metodę stop(), w której umieścimy wywoła-
nie funkcji zatrzymującej wątek.
Poniżej podany został kod metod start() oraz stop():
/* Deklaracja metody start */
public void start() {
/* Definiujemy nowy wątek (Thread) dla tego zadania */
tkthread = new Thread(this);
/* uruchamiamy Ticker jako niezależny wątek */
tkthread.start();
}
/* Deklaracja metody stop */
public void stop() {
/* zatrzymujemy wątek Thicer */
tkthread.stop();
}
Metoda run()
W definicji naszej przykładowej klasy, na samym jej początku, znajdowały się słowa
implements Runnable. Definiowały one szablon specjalnej metody, która wywoły-
wana jest po załadowaniu apletu i wykonaniu metod init() oraz start(). Jeśli dys-
ponujesz jakimkolwiek doświadczeniem programistycznym, szybko zauważysz, że me-
toda run() jest nieco podobna do main() w językach C i C++.
Jeśli jednak nie masz żadnego doświadczenia w programowaniu w innych językach, to
i tak nie masz się czym przejmować. Tak naprawdę jedyne, o czym powinieneś wie-
dzieć, to to, iż metoda ta zawiera pętlę, w której umieszczony jest kod cykliczne przery-
sowujący powierzchnię apletu. Za każdym razem, gdy powierzchnia apletu jest przery-
sowywana, wyświetlony na niej tekst przesuwany jest odrobinę w prawo lub w lewo.
Poniżej został podany kod metody run():
/* Deklaracja metody run */
public void run() {
/* Przypisujemy aktualnemu wątkowi najniższy priorytet */
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
/* Tworzymy nieskończoną pętlę, która będzie odświeżać */
/* powierzchnię apletu */
while (true) {
/* zatrzymujemy aplet na 10 sekund, tak aby inne programy */
/* też mogły coś zrobić */
try {Thread.sleep( 10 ); } catch (InterruptedException e){}
/* gdy wykonywanie zostanie wznowione odświeżamy */
/* powierzchnię apletu */
repaint();
}
}
Rozdział 15. Wykorzystywanie Javy 443
Metoda paint()
Ostatnią metodą naszego przykładowego apletu jest metoda paint(). Za każdym ra-
zem, gdy w metodzie run() wywoływana jest metoda repaint(), zostaje wywołana
także metoda paint() (oprócz tego wywoływane są także i inne). Metoda paint()
zawiera cały kod odpowiadający za wyświetlanie tekstu i przesuwanie go po ekranie.
Używając pojęć stosowanych w terminologii Javy, należałoby powiedzieć, że metoda
paint() jest miejscem, gdzie informacje (tekst) wyświetlane są na  płótnie Javy 
obiekcie klasy Canvas. Obiekt ten odpowiada powierzchni apletu, na której można ry-
sować i wyświetlać teksty. Poniżej podany został kod metody paint() stosowanej w
naszym przykładowym aplecie:
/* Deklaracja metody paint */
/* W odróżnieniu od innych metod, metoda paint() otrzymuje pewne */
/* informacji od metody, która ją wywołuje. Informacje te są */
/* przypisywane do zmiennej tk klasy Graphics */
public void paint(Graphics tk) {
/* pobieramy wielkość obszaru w którym wyświetlana jest */
/* zawartość apletu i przypisujemy ją do zmiennej */
/* tksize klasy Dimension */
tksize = size();
/* określamy używaną czcionkę, wybraną w metodzie init() */
/* i pobieramy jej parametry */
tk.setFont(tkfont);
FontMetrics tkfm = tk.getFontMetrics();
/* Jeśli to pierwsze wywołanie metody paint() to określamy */
/* wysokość tekstu w pikselach, w kolejnych wywołaniach */
/* używamy wcześniej obliczonej wartości */
tktexthgt = ( tktexthgt==0 ) ? tkfm.getHeight() : tktexthgt;
/* Jeśli to pierwsze wywołanie metody paint() to określamy */
/* szerokość tekstu w pikselach, w kolejnych wywołaniach */
/* używamy wcześniej obliczonej wartości */
tktextwth = ( tktextwth==0 ) ? tkfm.stringWidth( tktext ) :
tktextwth;
/* Jeśli kierunek przesuwu tekstu został określony jako Left */
/* to używamy pierwszej grupy obliczeń, aby określić */
/* położenie tekstu w tym wywołaniu metody. Jeśli kierunek */
/* to Right, używamy drugiej grupy obliczeń. */
if (tkdirection=="Left") {
tkpos = ( tkpos <= tktextwth * -1 ) ? tksize.width :
tkpos - tkspd;
}
else{
tkpos = ( tkpos > tksize.width ) ? 0 - tktextwth:
tkpos + tkspd;
}
/* Wybieramy czarny jako kolor tekstu */
tk.setColor(Color.black);
/* Wyświetlamy tekst w nowym położeniu */
tk.drawString( tktext, tkpos,( tksize.height + tktexthgt )/2);
}
}
Aączenie wszystkich fragmentów kodu
Zgodnie z moją wcześniejszą obietnicą, nadszedł czas, aby zaprezentować pełną wersję
444 Część 5. Multimedia i aplety Javy
kodu zródłowego naszego pierwszego apletu. Z przedstawionego kodu usunięte zostały
wszystkie komentarze oraz niepotrzebne puste linie. Zawiera on jednak oryginalne
wcięcia, gdyż ułatwiają one analizę programu oraz wzajemnych relacji pomiędzy po-
szczególnymi jego fragmentami. Podczas tworzenia programów w Javie, stosowanie
odpowiednich wcięć jest bardzo prostym i skutecznym sposobem sprawdzania, czy nie
zostały pominięte konieczne nawiasy klamrowe ({ i }).
Listing 15.1. Applet Ticker
/* Ćwiczenie - Ticker.class*/
import java.applet.*;
import java.awt.* ;
public class Ticker extends Applet implements Runnable {
Thread tkthread = null;
String tktext = "Exercise - ticker tape";
int tkspd = 1;
String tkfname = "TimesRoman";
int tkfsz = 12;
Font tkfont = null;
String tkdirection = "Left";
Dimension tksize = null;
int tktextwth = 0;
int tktexthgt = 0;
int tkpos = -63000;
public void init() {
String getval = null;
getval = getParameter("tktext");
tktext = (getval == null ) ? tktext : getval;
getval = getParameter("tkspd");
tkspd = (getval == null ) ? tkspd :
(Integer.valueOf(getval).intValue());
getval = getParameter("tkfname");
tkfname = (getval == null) ? tkfname : getval ;
getval = getParameter("tkfsz");
tkfsz = (getval == null ) ? tkfsz :
(Integer.valueOf(getval).intValue());
tkfont = new java.awt.Font( tkfname, Font.PLAIN, tkfsz ) ;
getval = getParameter("tkreverse");
tkdirection = "Left";
tkpos = -63000 ;
if ( getval != null ) {
if ( getval.equalsIgnoreCase( "Yes") ) {
tkdirection = "Right";
tkpos = 63000;
}
}
this.setBackground( Color.white );
}
public void start() {
tkthread = new Thread(this);
tkthread.start();
}
Rozdział 15. Wykorzystywanie Javy 445
public void stop() {
tkthread.stop();
}
public void run() {
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
while (true) {
try {Thread.sleep( 10 ); }
catch (InterruptedException e){}
repaint();
}
}
public void paint(Graphics tk) {
tksize = size();
tk.setFont(tkfont);
FontMetrics tkfm = tk.getFontMetrics();
tktexthgt = ( tktexthgt==0 ) ? tkfm.getHeight() :
tktexthgt;
tktextwth = ( tktextwth==0 ) ? tkfm.stringWidth( tktext ):
tktextwth;
if (tkdirection=="Left") {
tkpos = ( tkpos <= tktextwth * -1 ) ? tksize.width :
tkpos - tkspd;
}
else{
tkpos = ( tkpos > tksize.width ) ? 0 - tktextwth:
tkpos + tkspd;
}
tk.setColor(Color.black);
tk.drawString(tktext,tkpos,(tksize.height+tktexthgt)/2);
}
}
Kompilacja przykładowego apletu
Po napisaniu kodu zródłowego apletu w Twoim ulubionym edytorze i zapisaniu go
w pliku dyskowym, kolejnym krokiem, który będziesz musiał wykonać, będzie kompi-
lacja programu do postaci kodów bajtowych. Jeśli używasz jakiegoś środowiska pro-
gramistycznego, to przejrzyj jego dokumentację, aby dowiedzieć się, w jaki sposób
skompilować program. Jeśli używasz JDK, to będziesz musiał posłużyć się programem
o nazwie javac.
Wywołanie programu javac z wiersza poleceń DOS-a lub Uniksa powinno mieć
(w naszym przypadku) następującą postać:
javac Ticker.java
Powyższe polecenie zakłada, iż kartoteka, w której znajduje się program javac
(zazwyczaj java/bin), została podana w zmiennej systemowej PATH oraz,
że kompilowany plik Ticker.java umieszczony jest w aktualnej kartotece. Oprócz
tego będziesz musiał zdefiniować jeszcze jedną zmienną systemową o nazwie
CLASSPATH. W tej zmiennej musisz podać ścieżkę dostępu do klas Javy (zazwyczaj
jest to ścieżka o postaci java/lib/classes.zip) oraz aktualną kartotekę   . .
Więcej informacji dotyczących konfigurowania JDK możesz znalezć na stronie WWW
446 Część 5. Multimedia i aplety Javy
pod adresem: http://java.sun.com/faqIndex.html. Jeśli używasz systemu Windows
95, możesz także przejrzeć stronę znajdującą się pod adresem:
http://www-net.com/java/faq/faq-java-win95.txt.
Nie przejmuj się także faktem, iż w okienku DOS-owym w systemie Windows nazwa
pliku zródłowego będzie nieco inna od podanej przez Ciebie (wyświetlana nazwa
pliku będzie miała postać TICKER.JAV). Po prostu podaj ją w postaci: Ticker.java,
a wszystko powinno pójść dobrze.
Choć JDK jest dostępne bezpłatnie, to jednak kłopoty, jakie można napotkać przy
jego konfigurowaniu i wykorzystywaniu sprawiają, iż pomysł wydania pieniędzy na
zakup jakiegoś bardziej wyrafinowanego, graficznego środowiska programistycznego
wydaje się być dobry i usprawiedliwiony.
Jeśli wszystko pójdzie zgodnie z planem, to po kilku sekundach (lub minutach, w zależ-
ności od komputera, jakim dysponujesz) kursor z powrotem pojawi się w linii poleceń,
a w kartotece pojawi się nowy plik o nazwie Ticker.class.
Jeśli jednak kompilator Javy napotkał jakieś błędy, na ekranie może zostać wyświetlony
komunikat podobny do przedstawionego poniżej:
C:\samsgold\java>javac Ticker.java
Ticker.java:15:  ; expected.
Dimension tksize = null
^
Ticker.java:49:  ; expected.
this.setBackground( Color.white )
2 errors
Liczba umieszczona po dwukropku określa numer wiersza, w którym pojawił się błąd,
natomiast wyświetlony dalej komentarz informuje o powodach zgłoszenia błędu. Poni-
żej zostanie wyświetlona linia kodu zródłowego, w której pojawił się błąd, a w niej
miejsce wystąpienia błędu będzie zaznaczone za pomocą znaku  ^ .
Jeśli podczas kompilacji wpisanego przez Ciebie programu pojawią się jakiekolwiek
błędy, przejdz z powrotem do edytora, popraw kod pliku Ticker.java i ponownie
spróbuj go skompilować. Kiedy w końcu uda Ci się poprawnie skompilować program,
będziesz mógł dodać aplet do strony WWW.
Dołączanie apletów do stron WWW
Kiedy Twój nowy aplet zostanie już skompilowany, będziesz musiał dołączyć go do
strony WWW. W tej części rozdziału dowiesz się, w jaki sposób możesz umieszczać na
stronach WWW aplety stworzone przez siebie oraz przez inne osoby.
Rozdział 15. Wykorzystywanie Javy 447
Znacznik
Do umieszczania apletów na stronach WWW służy znacznik mający nastę-
pującą postać:

W atrybucie CODE powinieneś podać nazwę klasy, którą chcesz uruchomić (przy czym
plik klasowy  plik z rozszerzeniem .class  musi być umieszczony w tej samej kar-
totece, co strona WWW). Atrybuty WIDTH oraz HEIGHT służą do określenia szerokości
i wysokości powierzchni apletu; są to atrybuty obowiązkowe, których wartości zawsze
musisz podać. W przeciwnym razie, aplet nie będzie widoczny.
Bazując na powyższych informacjach, możesz już napisać kod HTML, powodujący
wyświetlenie naszego przykładowego apletu Ticker na stronie WWW:

W ten prosty sposób sprawiłeś, iż po załadowaniu strony WWW zostanie na niej wy-
świetlony aplet Ticker, przy czym użyte zostaną domyślne wartości określone w me-
todzie init() (patrz ćwiczenie 15.1).
Aby przeglądarka była w stanie odszukać kod apletu, umieść go w tej samej kartote-
ce, w której znajdują się Twoje dokumenty HTML.
Znacznik
Znacznik , stosowany wewnątrz znacznika , służy do definiowania
parametrów przekazywanych do apletów; w naszym aplecie Ticker może on posłużyć
do określenia prezentowanego tekstu.
Parametry przekazane do apletu są zazwyczaj sprawdzane wewnątrz metody init().
W naszym przykładowym aplecie Ticker, w metodzie init(), wykonanych zostało
kilka wywołań metody getParameter(). Przeszukuje ona wszystkie parametry prze-
kazane do apletu, aby znalezć w nich ten o nazwie podanej jako argument wywołania
metody:
getval = getParameter( tktext );
tktext = (getval == null) ? tktext : getval;
W tym przykładzie wywołanie metody getParameter("tktext") każe Javie pobrać
wartość parametru o nazwie "tktext", zdefiniowanego pomiędzy znacznikami
i . Jeśli wartość parametru zostanie odnaleziona, będzie wyświe-
tlana na powierzchni apletu zamiast wiadomości domyślnej.
Aby zdefiniować parametr "tktext", będziesz musiał umieścić wewnątrz znacznika
znacznik o następującej postaci:

448 Część 5. Multimedia i aplety Javy
Atrybut NAME używany w etykiecie określa nazwę parametru przekazywane-
go do apletu, natomiast atrybut VALUE określa jego wartość.
Jeśli przyjrzysz się dokładniej metodzie init(), zobaczysz, że oprócz parametru
"tktext" do naszego przykładowego apletu można przekazać jeszcze cztery inne pa-
rametry:
NAME="tkspd"
Określa szybkość przesuwania tekstu; wartość 1 odpowiada najmniejszej
szybkości,
NA-
określa nazwę czcionki; domyślną jest Times New Roman,
ME="tkfname"
NAME="tkfsz"
określa wielkość czcionki; domyślna wynosi 12 punktów,
NA-
zmienia kierunek przewijania tekstu na przeciwny.
ME="tkreverse
"
Dzięki połączeniu wszystkich tych parametrów, możesz sterować zachowaniem i wy-
glądem apletu, co pokazałam na poniższym przykładzie:


Ćwiczenie - Ticker.class


Java - telegraf
















Zastępowanie apletów kodem HTML
Zapewne zwróciłeś uwagę na to, że znacznik posiada dwie części, otwiera-
jącą oraz zamykającą. Wewnątrz tego znacznika, oprócz dowolnej ilości znaczników
, możesz także umieszczać kod HTML lub normalny tekst.
Tekst ten (lub kod HTML) wyświetlany będzie przez wszystkie przeglądarki, które nie
są w stanie wykonywać apletów Javy i nie rozumieją znaczenia znacznika . Ze
względu na fakt, iż Twoja strona może być przeglądana przez różnego typu przeglądar-
ki, dołączenie do niej tekstu zastępczego jest bardzo dobrym pomysłem. Dzięki niemu
użytkownicy przeglądarek, które nie obsługują apletów, będą mogli zobaczyć na Twojej
Rozdział 15. Wykorzystywanie Javy 449
stronie coś innego, jakiś rysunek lub komentarz, a nie tylko puste miejsce po aplecie.
Rozbudowywanie przykładu Ticker
Małym nakładem pracy będziesz mógł dodać do naszego przykładowego apletu Tic-
ker nowe możliwości. Dla przykładu, możesz dodać nowe parametry, służące do okre-
ślania koloru wyświetlanego tekstu lub tła apletu, możliwości pozwalające na wyświe-
tlanie tekstu zapisanego w oddzielnym pliku lub jakąś szczególną, fantazyjną ramkę.
Może się zdziwisz, ale na WWW są już dostępne rozbudowane wersje apletu Ticker.
Dzięki temu nie będziesz musiał tracić czasu. Adresy większości witryn WWW, korzy-
stających z apletów Javy, będziesz mógł znalezć w witrynie o nazwie Gamela pod adresem
http://www.gamelan.com/.
Wiele aktualnie dostępnych klas Javy zawiera ich kod zródłowy, który możesz
dowolnie modyfikować i używać w swoich własnych apletach. Zanim jednak użyjesz
kodu napisanego przez inne osoby, sprawdz prawa autorskie i warunki, jakie musisz
spełnić, aby móc go zmodyfikować lub użyć w swoim własnym aplecie. Niektórzy
autorzy proszą o przesłanie informacji lub umieszczenie hiperłącza do ich strony
głównej, inni nie wymagają niczego.
Stosowanie gotowych apletów
Ponieważ aplety Javy mogą być umieszczane w dowolnych miejscach WWW i uru-
chamiane na różnych systemach komputerowych, będziesz mógł używać w swoich
stronach WWW apletów stworzonych przez inne osoby. W niektórych przypadkach nie
będziesz nawet musiał kopiować pliku klasowego apletu na swój własny komputer;
wystarczy, że będziesz znał dokładny adres, pod którym jest on umieszczony. Jeśli czu-
jesz, że nie jesteś w stanie pojąć wszystkich tajników związanych z programowaniem w
Javie lub, jeśli nie masz czasu na naukę, korzystanie z apletów innych autorów może
być bardzo dobrym pomysłem. Przy takim rozwiązaniu nie musisz pisać żadnego kodu,
wystarczy, że odpowiednio skonfigurujesz używany aplet, tak aby działał i wyglądał
zgodnie z Twoimi wymaganiami.
Krótkie przeglądnięcie zawartości witryny Gamelan pozwoli Ci odnalezć adresy innych
witryn, z których można skopiować klasy, jakich będziesz mógł używać na własnych
stronach WWW. Warto odwiedzić witrynę Java Boutique, przedstawioną na rysunku 15.5.
Witryna ta zawiera kolekcję setek apletów posegregowanych według kategorii: efekty
dzwiękowe, programy edukacyjne, gry, efekty tekstowe, narzędzia i efekty wizualne.
Aplety te są dostarczane wraz z przykładami wykorzystania, plikami .class, .java oraz
zródłami HTML. Więcej informacji o sposobach używania tych apletów na własnych
stronach WWW możesz znalezć pod adresem http://javaboutique.internet.com/.
450 Część 5. Multimedia i aplety Javy
Rysunek 15.5.
Przykład narzędzi
J-tools
Podsumowanie
W tym rozdziale zobaczyłeś, w jaki sposób Java na zawsze zmieniła oblicze prezentacji
tworzonych na stronach WWW. Wzrost możliwości jest jednak połączony z konieczno-
ścią opanowania nowych narzędzi, czyli języka Java. Na szczęście, aplety w nim pisane
można bardzo prosto i szybko dołączać do stron WWW, wystarczy umieścić na stronie
znacznik oraz kilka dodatkowych znaczników .
Jeśli chcesz dowiedzieć się wszystkiego o możliwościach Javy, wyświetl stronę http://
java.sun.com/ i przyłącz się do podróży po metodach tworzenia stron WWW nowej
generacji.
Warsztat
W tej części rozdziału znajdziesz pytania i odpowiedzi, quiz oraz ćwiczenia związane
ze stosowaniem Javy na stronach WWW.
Pytania i odpowiedzi
P. Znajomi radzą mi, abym nie używał Javy, gdyż aplety mogą być wykonywane
jedynie na niewielkiej ilości przeglądarek. Czy to prawda?
O. To była prawda, lecz osoby, które Ci to mówią, nie dysponują prawdopodobnie na-
jaktualniejszymi informacjami. Teraz nie tylko HotJava, lecz także dwie najbardziej
popularne przeglądarki  Netscape Communicator oraz Microsoft Internet Explorer
Rozdział 15. Wykorzystywanie Javy 451
 pozwalają na wykonywanie apletów. Popularność Javy rośnie w bardzo dużym
tempie. Wiele firm programistycznych tworzy nowe wersje swoich produktów, pi-
sząc je właśnie w Javie, do nich należy także Corel, gdzie powstaje aktualnie wersja
Corel Office for Java. Jednakże używanie kodu HTML, zastępującego aplet (we-
wnątrz znacznika ), wciąż jest zalecanym rozwiązaniem. Dzięki niemu
możesz używać apletów w innych przeglądarkach bez żadnych negatywnych skut-
ków.
P. Próbuję przetestować aplet lokalnie w Navigatorze 2.0, lecz wciąż otrzymuję
błędy. Aplet został poprawnie skompilowany i w przypadku łączenia się z nim
za pośrednictwem Internetu działa poprawnie. Co robię zle?
O. Niektóre wersje przeglądarki Netscape Navigator 2.0 zawierają błąd, który uniemoż-
liwia ponowne załadowanie apletu. Jedynym sposobem rozwiązania tego problemu
jest zamknięcie programu i ponowne jego uruchomienie.
Quiz
1. Jaka jest podstawowa zaleta Javy w porównaniu z wcześniejszymi językami
programowania, takimi jak C++?
2. Czym kompilowany język programowania, na przykład Java, różni się od języków,
takich jak HTML lub JavaScript?
3. Jaka jest różnica pomiędzy apletem a aplikacją napisaną w języku Java?
4. Jaki znacznik HTML służy do umieszczania apletów na stronach WWW?
Jaki znacznik umożliwia określanie parametrów (opcji) apletu?
5. Jeśli programowanie apletów w języku Java chwilowo przekracza jeszcze Twoje
możliwości, to czy istnieje jakiś sposób na uatrakcyjnienie tworzonych przez Ciebie
stron apletami?
Odpowiedzi
1. Język C++ wymaga tworzenia odrębnych, różnych wersji programu dla każdej
platformy, na jakiej program ten ma działać. W odróżnieniu od niego, język Java
daje możliwość jednokrotnego napisania programu i uruchomienia go gdziekolwiek.
Właśnie dlatego programy napisane w języku Java doskonale nadają się
do dystrybucji poprzez WWW, czyli przez medium, z którego może korzystać
wiele różnych platform.
2. W odróżnieniu od HTML-a lub języka JavaScript, skompilowane programy
nie mogą być, tak po prostu, wczytane przez przeglądarkę bądz jakikolwiek inny
program i wykonane. W pierwszej kolejności należy uruchomić program nazywany
kompilatorem, który konwertuje (lub kompiluje) kod zródłowy programu do jego
ostatecznej, wykonywalnej postaci.
3. Aplety Javy zostały zaprojektowane w celu umieszczania ich na stronach WWW,
natomiast aplikacje są niezależnymi programami, których uruchomienie nie wymaga
452 Część 5. Multimedia i aplety Javy
użycia przeglądarki.
4. Aplety Javy są umieszczane na stronach WWW przy wykorzystaniu znacznika
. Do definiowania parametrów apletu służy natomiast znacznik .
5. Jak najbardziej. Umieszczanie na własnych stronach apletów stworzonych przez
inne osoby jest relatywnie proste. W niektórych przypadkach nie będziesz musiał
nawet kopiować klasy apletu na własny komputer, wystarczy, że będziesz wiedział,
gdzie się ona znajduje.
Ćwiczenia
1. Czerpiąc inspirację z klas Ticker, które można znalezć na witrynie Gamelan,
sprawdz, czy będziesz w stanie rozszerzyć możliwości przykładowego apletu
przedstawionego w tym rozdziale.
2. Jeśli wykonanie poprzedniego ćwiczenia przekracza jeszcze Twe możliwości, to
otwórz przeglądarkę i wyświetl w niej witrynę Java Boutique, o której wspominałam
pod koniec tego rozdziału. Następnie skopiuj dowolny, interesujący aplet, osobiście
polecałaby aplet FireWorks (http://javaboutique.internet.com/FireWorks/index.html),
umieść go na własnej stronie i poeksperymentuj, podając różne wartości parametrów.


Wyszukiwarka

Podobne podstrony:
1000 złotych 15 07 1947
100 złotych 15 07 1947
kodeks karny skarbowy 15 07 2016
20 złotych 15 07 1947
500 złotych 15 07 1947
wyciag 15 07 170544
07 (15)
konsultant obslugi projektow finansowanych z programu kapital ludzki 07 15,86
MIKROBIOLOGIAwyk 07 10 15
US Billboard Top 100 Single Charts 07 02 15 (2015) Tracklista

więcej podobnych podstron