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 dźwię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 potrzeby Internetu była przeglądarka HotJava, posiadająca wszystkie standardowe cechy 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żytkownikiem. 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 źró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. |
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 wyobraźnia programistów. Jednak, wziąwszy pod uwagę aplety, jakie możemy znaleźć 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 przeglą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ż znaleźć 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.
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 wykazy dostępnych apletów oraz wiele różnych informacji dotyczących Javy. Stronę WWW firmy Netscape poświęconą tej tematyce możesz znaleźć pod adresem http://developer. netscape.com/tech/java/index.html. Znajdziesz na niej odwołania do wszelkich informacji 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 najbardziej aktualne i szczegółowe informacje dotyczące wszelkich aspektów wykorzystania Javy i stanowi podstawowe źródło narzędzi programistycznych używanych przy tworzeniu programów w Javie oraz dokumentacji języka.
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ć odpowiednie 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ątkiem JDK firmy Sun (który jest dostępny bezpłatnie), wszystkie pozostałe programy są 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ł znaleźć w nich aktualne biblioteki klas, aplikację służącą do przeglądania apletów bez konieczności uruchamiania przeglądarki oraz narzędzia do testowania programów i odszukiwania 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ł znaleźć we wspomnianej już wcześniej książce „Java 1.1”. |
Jeśli do pisania programów w Javie zechcesz używać bardziej wyrafinowanych, komercyjnych 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 adresem 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, Macintosh, 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ł zacząć pisać swoje własne aplety. Programy w Javie możesz pisać, używając normalnego 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 rozpocząć 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. Jakikolwiek 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 apletu, 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łowa extends Applet informują system, na jakiej klasie bazuje tworzona klasa. Ponieważ 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. |
Deklarowanie zmiennych
Poniżej definicji klasy, będziesz musiał zdefiniować zmienne wykorzystywane w aplecie. Podobnie jak w większości innych języków obiektowych, także i w Javie wykorzystywane 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 nowych obiektów danej klasy. Używana jest do określania początkowych wartości zmiennych. 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 aplecie 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());
/* 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 przykładowy aplet ma być odrębnym zadaniem, obsługiwanym niezależnie do wszelkich innych programów wykonywanych na komputerze w tym samym czasie. Takie postępowanie pozwoli systemowi operacyjnemu znacznie lepiej wykorzystać posiadane zasoby i rozdzielić je pomiędzy wszystkie zadania. Gdybyśmy nie postąpili w ten sposób, istniał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ędziesz musiał nauczyć się zatrzymywać rozpoczęty aplet, gdy nie będzie on już potrzebny. Do tego właśnie wykorzystamy metodę stop(), w której umieścimy wywołanie 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ływana jest po załadowaniu apletu i wykonaniu metod init() oraz start(). Jeśli dysponujesz jakimkolwiek doświadczeniem programistycznym, szybko zauważysz, że metoda 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ś wiedzieć, to to, iż metoda ta zawiera pętlę, w której umieszczony jest kod cykliczne przerysowujący powierzchnię apletu. Za każdym razem, gdy powierzchnia apletu jest przerysowywana, 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();
}
}
Metoda paint()
Ostatnią metodą naszego przykładowego apletu jest metoda paint(). Za każdym razem, 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 rysować 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);
}
}
Łączenie wszystkich fragmentów kodu
Zgodnie z moją wcześniejszą obietnicą, nadszedł czas, aby zaprezentować pełną wersję kodu źró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 poszczegó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();
}
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 źródłowego apletu w Twoim ulubionym edytorze i zapisaniu go w pliku dyskowym, kolejnym krokiem, który będziesz musiał wykonać, będzie kompilacja programu do postaci kodów bajtowych. Jeśli używasz jakiegoś środowiska programistycznego, 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 znaleźć na stronie WWW 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 źró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 źró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, przejdź 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.
Znacznik <APPLET>
Do umieszczania apletów na stronach WWW służy znacznik <APPLET> mający następującą postać:
<applet code="nazwa.class" width=szerokość height=wysokość></applet>
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 kartotece, 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:
<applet code="Ticker.class" width=400 height=75></applet>
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 metodzie init() (patrz ćwiczenie 15.1).
|
Aby przeglądarka była w stanie odszukać kod apletu, umieść go w tej samej kartotece, w której znajdują się Twoje dokumenty HTML. |
Znacznik <PARAM>
Znacznik <PARAM>, stosowany wewnątrz znacznika <APPLET>, 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 przekazane do apletu, aby znaleźć 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 <APPLET> i </APPLET>. Jeśli wartość parametru zostanie odnaleziona, będzie wyświetlana na powierzchni apletu zamiast wiadomości domyślnej.
Aby zdefiniować parametr "tktext", będziesz musiał umieścić wewnątrz znacznika <APPLET> znacznik <PARAM> o następującej postaci:
<param name="tktext" value="Wyświetl ten tekst w aplecie!">
Atrybut NAME używany w etykiecie <PARAM> określa nazwę parametru przekazywanego 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 parametry:
NAME="tkspd" |
Określa szybkość przesuwania tekstu; wartość 1 odpowiada najmniejszej szybkości, |
NAME="tkfname" |
określa nazwę czcionki; domyślną jest Times New Roman, |
NAME="tkfsz" |
określa wielkość czcionki; domyślna wynosi 12 punktów, |
NAME="tkreverse" |
zmienia kierunek przewijania tekstu na przeciwny. |
Dzięki połączeniu wszystkich tych parametrów, możesz sterować zachowaniem i wyglądem apletu, co pokazałam na poniższym przykładzie:
<HTML>
<HEAD>
<TITLE>Ćwiczenie - Ticker.class</TITLE>
</HEAD>
<BODY>
<H1>Java - telegraf</H1>
<HR>
<P ALIGN=CENTER>
<APPLET CODE="Ticker.class" width=400 height=50>
<PARAM NAME="tktext" VALUE="Przewijanie tekstu w oknie telegrafu">
<PARAM NAME="tkspd" VALUE="1">
<PARAM NAME="tkfname" VALUE="Arial">
<PARAM NAME="tkfsz" VALUE="28">
<PARAM NAME="tkreverse" VALUE="Yes">
</APPLET>
</P><HR>
</BODY>
</HTML>
Zastępowanie apletów kodem HTML
Zapewne zwróciłeś uwagę na to, że znacznik <APPLET> posiada dwie części, otwierającą oraz zamykającą. Wewnątrz tego znacznika, oprócz dowolnej ilości znaczników <PARAM>, 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 <APPLET>. Ze względu na fakt, iż Twoja strona może być przeglądana przez różnego typu przeglądarki, 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 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 Ticker 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świetlanie 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, korzystających z apletów Javy, będziesz mógł znaleźć w witrynie o nazwie Gamela pod adresem
http://www.gamelan.com/.
|
Wiele aktualnie dostępnych klas Javy zawiera ich kod źró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, sprawdź 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 uruchamiane 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 czujesz, ż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 odnaleźć 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 dźwiękowe, programy edukacyjne, gry, efekty tekstowe, narzędzia i efekty wizualne. Aplety te są dostarczane wraz z przykładami wykorzystania, plikami .class, .java oraz źródłami HTML. Więcej informacji o sposobach używania tych apletów na własnych stronach WWW możesz znaleźć pod adresem http://javaboutique.internet.com/.
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 <APPLET> oraz kilka dodatkowych znaczników <PARAM>.
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 najaktualniejszymi informacjami. Teraz nie tylko HotJava, lecz także dwie najbardziej popularne przeglądarki — Netscape Communicator oraz Microsoft Internet Explorer — pozwalają na wykonywanie apletów. Popularność Javy rośnie w bardzo dużym tempie. Wiele firm programistycznych tworzy nowe wersje swoich produktów, piszą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 (wewnątrz znacznika <APPELT>), wciąż jest zalecanym rozwiązaniem. Dzięki niemu możesz używać apletów w innych przeglądarkach bez żadnych negatywnych skutkó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ę źle?
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
Jaka jest podstawowa zaleta Javy w porównaniu z wcześniejszymi językami programowania, takimi jak C++?
Czym kompilowany język programowania, na przykład Java, różni się od języków, takich jak HTML lub JavaScript?
Jaka jest różnica pomiędzy apletem a aplikacją napisaną w języku Java?
Jaki znacznik HTML służy do umieszczania apletów na stronach WWW? Jaki znacznik umożliwia określanie parametrów (opcji) apletu?
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
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.
W odróżnieniu od HTML-a lub języka JavaScript, skompilowane programy nie mogą być, tak po prostu, wczytane przez przeglądarkę bądź jakikolwiek inny program i wykonane. W pierwszej kolejności należy uruchomić program nazywany kompilatorem, który konwertuje (lub kompiluje) kod źródłowy programu do jego ostatecznej, wykonywalnej postaci.
Aplety Javy zostały zaprojektowane w celu umieszczania ich na stronach WWW, natomiast aplikacje są niezależnymi programami, których uruchomienie nie wymaga użycia przeglądarki.
Aplety Javy są umieszczane na stronach WWW przy wykorzystaniu znacznika <APPLET>. Do definiowania parametrów apletu służy natomiast znacznik <PARAM>.
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
Czerpiąc inspirację z klas Ticker, które można znaleźć na witrynie Gamelan, sprawdź, czy będziesz w stanie rozszerzyć możliwości przykładowego apletu przedstawionego w tym rozdziale.
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.
452 Część 5. Multimedia i aplety Javy
Rozdział 15. Wykorzystywanie Javy 451