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