Upload
elaina
View
34
Download
1
Embed Size (px)
DESCRIPTION
Referat z przedmiotu Języki i techniki programowania II Aplety. Autor Jakub Piechnik. Spis treści:. 1.Co to jest aplet? 2.Jak umieścić to „coś” na stronie. 3.Co mówisz? – czyli przekazywanie parametrów. 4.Życie pana A. – czyli init/start/stop/destroy. - PowerPoint PPT Presentation
Citation preview
Referat z przedmiotu Języki i techniki programowania II
Aplety
Autor Jakub Piechnik
Spis treści:
1.Co to jest aplet?2.Jak umieścić to „coś” na stronie.3.Co mówisz? – czyli przekazywanie parametrów.4.Życie pana A. – czyli init/start/stop/destroy.5.”Co wolno wojewodzie ...” - czyli możliwości apletu.6.Std.out, std.err – czyli odpluskwiamy robaczka.7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami.8.Zostań małym Bachem – muzyka w apletach.9.”Masz jakieś wątki?” – wątki w apletach.10.Dobre rady dziadzia Piecha
Autor Jakub Piechnik
1.Co to jest aplet?
Aplet – to program napisany w języku programowania Java™, który może być umieszczony na stronie internetowej
(HTML), w bardzo podobny sposób, jak czyni się to z obrazkami. Kiedy strona taka zostanie otwarta przez
przeglądarkę wyposażoną w technologie Javy, kod apletu zostaje przetransferowany na komputer,z którego strona została otworzona, oraz wykonany przez przeglądarkę,
dzięki Java Virtual Machine (JVM) (przeglądarka wysyła do apletu polecenie zainicjowania i rozpoczęcia działania).
Aplety wykonywane są po stronie klienta.
Autor Jakub Piechnik
Merriam Webster "Collegiate Edition" w roku 1990 podała taką definicję:
krótka aplikacja szczególnie do wykonywania prostych, specyficznych zadań.
2.Jak umieścić to „coś” na stronie.
Jak już pisałem aplety na stronie umieszcza się w sposób bardzo podobny do obrazków. Oto przykład umieszczenia
apletu o nazwie „Hello World”:
Autor Jakub Piechnik
<HTML><HEAD><TITLE> Aplet Hello World</TITLE></HEAD><BODY>Oto co wypisuje program:<APPLET CODE="HelloWorld.class" WIDTH=150 HEIGHT=25></APPLET></BODY></HTML>
Umieszczenie apletu zawarte jest pomiędzy znacznikami <APPLET>...</APPLET>
Poprzedni zapis informuje przeglądarkę, że ma ona załadować klasę, której skompilowany kod znajduje się w pliku
HelloWorld.class. Przeglądarka będzie szukać tego pliku w katalogu w którym znajduje się dokument HTML zawierający
poprzedni zapis. Kiedy plik zostanie odnaleziony, przeglądarka ściaga go poprzez sieć, jeżeli jest to potrzebne, następnie
tworzy obiekt danej klasy (w naszym przypadku klasy HelloWorld). Jeżeli ten sam aplet zostanie załączony
dwukrotnie na jednej stronie, przeglądarka stworzy dwa obiekty tej samej klasy.
Autor Jakub Piechnik
2.Jak umieścić to „coś” na stronie.
Teraz przyjrzyjmy się bliżej jakie „opcje” musi, może posiadać Umieszczenie apletu na stronie.
< APPLET [CODEBASE = codebaseURL] CODE = appletFile [ALT = alternateText] [NAME = appletInstanceName]WIDTH = pixels HEIGHT = pixels [ALIGN = alignment] [VSPACE = pixels] [HSPACE = pixels] >
[< PARAM NAME = appletParameter1 VALUE = value >] [< PARAM NAME = appletParameter2 VALUE = value >] . . . [alternateHTML]
</APPLET>
Mamy następujący zapis:
Autor Jakub Piechnik
2.Jak umieścić to „coś” na stronie.
To co pisane jest jest czcionka pogrubiona musi być pisane w sposób pokazany, kursywę należy zastąpić stosownymi wartościami, zwroty w
nawiasach [,] mogą być pominięte.
CODEBASE=codebaseURL
opcjonalny atrybut określający adres apletu – katalog w którym znajduje się kod apletu.
CODE=appletFile
obowiązkowy atrybut określający nazwę pliku, zawierającego skompilowany kod apletu.
ALT=alternativeText
opcjonalny atrybut, określający co ma pojawić się, jeżeli przeglądarka „rozumie”, że umieszczony jest aplet, ale nie potrafi uruchomić apletów Javy.
NAME = appletInstanceName opcjonalny atrybut określający nazwę apletu, co umożliwia apletom z tej
samej strony odnalezienie się.
WIDTH = pixels HEIGHT = pixels
obowiązkowe atrybuty określające początkową wielkość (w pixelach) szerokości i wysokości obszaru na którym będzie wyświetlany aplet.
Autor Jakub Piechnik
2.Jak umieścić to „coś” na stronie.
ALIGN = alignment
opcjonalny argument określający wyrównanie apletu; możliwe wartości są identyczne jak przy umieszczaniu na stronie obrazka: left, right, top, texttop, middle, absmiddle, baseline, bottom, absbottom.
VSPACE = pixels HSPACE = pixels
opcjonalne argumenty określające ilość pixeli z góry i z dołu (VSPACE) oraz z boków (HSPACE) od oblewającego go tekstu.
< PARAM NAME = appletParameter1 VALUE = value >
opcjonalne argumenty - przekazują parametry do apletu.
alternateHTML
opcjonalne – jeżeli przeglądarka nie wspiera technologii Javy i „nie rozumie” znaczników <APPLET></APPLET> to ignoruje wszystko pomiędzy nimi, poza tekstem, który zostaje wyświetlony. (Przeglądarki wspierające technologie Javy ignorują ten tekst)
Autor Jakub Piechnik
2.Jak umieścić to „coś” na stronie.
Przypomnę tu tylko, że aplet składający się z kilku plików dobrze byłoby spakować do pliku *.jar (czyli archiwa Javy), w celu
zminimalizowania jego objętości – po prostu, jeżeli aplet będzie znajdował się w kilku plikach to za każdym razem przeglądarka będzie
musiała łączyć się z serwerem i ściągać pliki *.class, a tak zrobi to tylko raz. Przyspiesza to wgrywanie apletu i zmniejsza zdenerwowanie
użytkowników wynikające ze zbyt długiego oczekiwania. W celu uzyskania większej ilości informacji o plikach *.jar odsyłam do referatu
Łukasza Kozienia „Style kodowania”
Autor Jakub Piechnik
2.Jak umieścić to „coś” na stronie.
Teraz krótki przykład jak umieścic aplet w pliku *.jar na stronie.
<APPLET CODE=„edu.agh.jtp.piechu.MójAplet.class" ARCHIVE=„plik1.jar, plik2.jar"
WIDTH=100 HEIGHT=200><PARAM NAME = ”FPS” VALUE = ”25”>
</APPLET> Przeglądarka szuka plików *jar w tym samym katalogu, w którym
szukałaby pliku *.class apletu. Następnie przeszukuje pliki archiwów i jeżeli nie
znajdzie tam zadanego pliku *.class stara się załadować go tak, jakby nie było
żadnych archiwów.
3.Co mówisz? - czyli przekazywanie parametrów.
Parametry są tym dla apletu, czym argumenty linii komend dla aplikacji. Pozwalają one użytkownikowi na większe
personifikowanie operacji apletu. Poprzez definiowanie parametrów, aplet staje się bardziej elastyczny i może działać w wielu sytuacjach, nie wymagając ponownego przepisywania
kodu oraz kompilacji.
Autor Jakub Piechnik
Jest to jedyna możliwa metoda przekazywania parametrów bezpośrednio do apletu przez użytkownika.
Używając parametrów należy zawsze umieszczać w aplecie pewne
wartości domyślne, tak, aby aplet działał nawet jeśli użytkownik
nie poda wartości dla danego parametru.
Aplety aby uzyskać informacje o wartościach danych parametrówużywają metody getParameter z klasy java.applet.Applet. Oto
przykładowe wywołanie tej metody (zwracające rozmiar – szerokość apletu):
int fps = 10; . . . String fpsString = getParameter(„FPS"); if (fpsString != null) {
try {
fps = Integer.parseInt(fpsString); } catch (NumberFormatException e) {
//Użyj domyślnej wartości – w tym przypadku 10 }
}
Autor Jakub Piechnik
3.Co mówisz? - czyli przekazywanie parametrów.
Jednak nie jest to koniec pracy dotyczący parametrów. Każdy aplet, który posiada możliwości odbierania parametrów, powinien przesłaniać metodę getParameterInfo z java.applet.Applet, która
zwraca informacje o parametrach przyjmowanych przez aplet. Oto prosty przykład:
3.Co mówisz? - czyli przekazywanie parametrów.
Autor Jakub Piechnik
public String[][] getParameterInfo(){
String[][] info = {{"fps", "1-100", „klatki na sekundę"},
}; return info;
}
Funkcja ta zwraca tablice z 3 tablicami o polach typu String: pierwsze pole to nazwa parametru, drugie informuje jaki rodzaj wartości aplet potrzebuje dla danego parametru, trzecie opisuje znaczenie danego
parametru.
Teraz zajmiemy się kolejnym ważnym aspektem apletów, a mianowicie uzyskiwaniem informacji o systemie maszyny, na
którym aplet został uruchomiony. Pomimo pewnych ograniczeń, o którym będzie mowa później aplety potrafią
uzyskać część informacji systemowych.
Autor Jakub Piechnik
3.Co mówisz? - czyli przekazywanie parametrów.
Oto informacje sytemowe, które może uzyskać aplet:Klucz Znaczenie
”file separator” Separator plików np. ”/”
”java.class.version” Numer wersji klasy javy
”java.vendor” Sprzedawca javy
”java.vendor.url” Url do sprzedawcy javy
”java.version” Numer wersji javy
”line.separator” Separator linii
”os.arch” Architektura systemu operacyjnego
”os.name” Nazwa systemu operacyjnego
”os.version” Wersja systemu operacyjnego
”path.separator” Separator ścieżki
Autor Jakub Piechnik
3.Co mówisz? - czyli przekazywanie parametrów.
A to te których czytać nie może:Klucz Znaczenie
”java.class.path” Java classpath
”java.home” Katalog instalacyjny Javy
”user.dir” Aktualny katalog użytkownika
”user.home” Domowy katalog użytkownika
”user.name” Nazwa konta użytkownika
Aby aplet poznał parametry systemowe musi użyć metody getProperty
z klasy java.lang.System. Prostsza jej wersja pobiera tylko łańcuch znakowy określający parametr, który chcemy uzyskać. Np.. Jeśli chcielibyśmy uzyskać informacje na temat os.name to
należy użyć:System.getProperty("path.separator");
Metoda ta zwraca łańcuch znakowy z wartością parametru. Jeżeli parametr nie istnieje zwraca null.
Autor Jakub Piechnik
3.Co mówisz? - czyli przekazywanie parametrów.
Dlaczego aplet nie może dojrzeć wszystkich wartości parametrów
systemowych? Kiedy aplet wywołuje metodę getParameter – security manager wywołuje własną metodę – checkPropertyAccess i jeżeli aplet chce poznać wartość niedostępną dla niego zostaje
wyrzucony SecurityException.
Więcej informacji, dotyczących komunikacji pomiędzy apletami, ale
również aplikacjami można uzyskać na kursie dotyczącym systemów rozproszonych, na 4 roku naszych studiów.
4.Życie pana A. – czyli init/start/stop/destroy.
O co właściwie chodzi z tymi metodami?Metody init, start, stop oraz destroy są charakterystyczne dla apletu. Są to metody, które każdy aplet powinien przesłaniać. Niektóre proste aplety nie przesłaniają żadnej z tych metod,
jednak dla bardziej skomplikowanych jest to niezbędne.
Autor Jakub Piechnik
Przyjrzyjmy się teraz bliżej każdej z tych metod:
Metoda init – jest to pierwsza z wywoływanych po załadowaniu apletu metod. Powinna ona zawierać kod, który normalnie zostałby umieszczony w konstruktorze. Powodem dla których aplety nie powinny używać konstruktorów jest fakt, iż aplet nie może mieć zagwarantowanego pełnego
środowiska, zanim zostanie wywołana metoda init. Więcej o niej napiszę, kiedy omawiać będę wątki w apletach.
Metoda start – jest to pierwsza metoda wywoływana przez przeglądarkę po metodzie init, inforume ona aplet, że
powinien on zacząć się wykonywać. Jeżeli aplet wypełnia jakieś zadania, po zainicjonowaniu, oprócz czekania na reakcje
użytkownika, powinien przesłaniać tą metodę swoją własną. Jeśli przesłaniamy metodę start, należy również przesłonić metodę stop. Jest ona również używana przy „budzeniu”
apletu, jeżeli ten został „uśpiony” metodą stop.
Autor Jakub Piechnik
4.Życie pana A. – czyli init/start/stop/destroy.
Metoda stop – jest to metoda używana aby poinformować aplet, iż ten powinien zatrzymać wykonywanie się.
Wykorzystuje się to w sytuacjach kiedy strona z apletem została zastąpiona przez inną (ewentualnie – strona z
apletem nie jest oglądana), tuż przed wykonaniem metody detroy.
Metoda destroy – jest to metoda wywoływana jeśli aplet nie jest już potrzebny, jego działanie jest zbędne. Wykorzystuje się ją do zwalnianie wszelkich zasobów zarezerwowanych przez aplet podczas inicjacji metodą init (np. kończy się
działanie wszystkich stworzonych w metodzie init wątków). Zawsze przed ta metoda będzie wywołana metoda stop. Jest to opcjonalna metoda, ponieważ w mniej zaawansowanych
apletach wszystko, co dotyczy sprzątania, można umieścić w metodzie stop.
Autor Jakub Piechnik
4.Życie pana A. – czyli init/start/stop/destroy.
Implementacja czterech powyższych metod dostarczonych w klasie java.applet.Applet nie wykouje żadnych czynności.
5.”Co wolno wojewodzie ...” - czyli możliwości apletu.
Jednym z podstawowych założeń języka Java jest bezpieczeństwo. Wiąże się to także z użytkowaniem apletów. Jak już wspomniałem wcześniej, aplety nie mają dostępu do wszystkich parametrów systemowych. Za bezpieczeństwo
podczas używania apletów odpowiada tzw. Security Managrer – pomimo, że domyślnie aplikacje nie są w niego wyposażone – to jednak przeglądarki oraz applet viewer’y posiadają takie
obiekty. I tak np. podczas wywołania metody exit z klasy System – po pierwsze wywoływana jest metoda checkExit
Security Manager’a może ona powrócić normalnie zezwalając na wyjście lub wyrzucić SecurityException – nie aprobując
danej operacji. Należy nadmienić tutaj, że SecurityExeption dziedziczy po RuntimeExeption.
Autor Jakub Piechnik
W przeglądarkach i applet viewer’ach wyrzucenie SecurityException
powoduje wypisanie informacji na standardowe wyjście. Aplet może
przechwycić ten wyjątek i odpowiednio go obsłużyć, np. przejść na inną drogę dokończenia zadania.
Zobaczmy teraz dokładniej restrykcje wobec apletów narzucaja obecne przeglądarki i aplet viewer’y:
• Aplet nie może ładować bibliotek i definiować rodzimych metod – aplety musza używać tylko własnego kodu dostarczonego w ściągniętym pliku *.class oraz Java API dostarczanego przez przeglądarkę/applet viewer’a (który z kolei zobowiązany jest dostarczać dostęp do API zdefiniowanego w pakietach java.*).
• Aplet nie może zazwyczaj czytać i zapisywać plików na maszynie na której są wykonywane
• Aplet nie może dokonywać połączeń sieciowych z inna maszyną niż z tą z której został ściągnięty
• Aplet nie może uruchamiać jakichkolwiek programów na maszynie na której jest wykonywany
Autor Jakub Piechnik
5.”Co wolno wojewodzie ...” - czyli możliwości apletu.
Autor Jakub Piechnik
5.”Co wolno wojewodzie ...” - czyli możliwości apletu.
• Aplet nie może czytać niektórych parametrów systemowych• Okno w którym wyświetlany jest aplet wygląda inaczej niż
okno w którym wyświetlana jest aplikacja – pozwala to użytkownikowi rozróżnić, co w danej chwili jest wykonywane; okna apletów zawierają tekst ostrzeżenia; dla przykładu – oto dwa okna stworzone przez program, który może być uruchamiany jako aplet lub aplikacja: pierwsze – aplikacja - uruchomiony został na platformie Solaris, drugie – aplet – uruchomiony na platformie Solaris przez przeglądarkę Netscape Navigator 2.0
Aplikacja
Aplet
Autor Jakub Piechnik
5.”Co wolno wojewodzie ...” - czyli możliwości apletu.Jednak jest kilka rzeczy, które aplety mogą robić, a
mianowicie:• Aplet może dokonywać połączeń sieciowych, ale tylko z maszyną z której został ściągnięty jego kod
• Aplet uruchamiany w przeglądarce może w łatwy sposób wyświetlać tekst HTML – jest to możliwe dzięki metodzie showDocument z interfejsu AppletContex z pakietu java.applet; są dwie wersje tej metody, a mianowicie:
public void showDocument(java.net.URL url) public void showDocument(java.net.URL url, String targetWindow)
pierwsza dostarcza tylko informacje o dokumencie który ma zostać wyświetlony, druga zawiera dodatkową informacje o oknie dla wyświetlenia danego dokumentu.
Argument Opis
”_self” Pokaż w oknie które zawiera aplet
”_parent” Pokaż w oknie rodzicielskim apletu, jeżeli takowego nie ma działa tak samo jak ”_self”
”_top” Pokaż w oknie top-level okna apletu; jeśli okno apletu jest top-level działa tak samo jak ”_self”
”_blank” Pokaż w nowym nie nazwanym oknie top-level
name Pokaż dokument w oknie o nazwie name; jeśli docelowa nazwa jeszcze nie istnieje to tworzony jest nowe okno top-level o nazwie nazwa
Jak to możliwe, że aplet potrafi wyświetlać różne dokumenty HTML, z różnych lokacji, mogąc połączyć się
tylko z maszyną z której został ściągnięty? Otóż na maszynie z której pochodzi aplet może działać aplikacja, z
którą aplet łączy się, a ta z kolei może łączyć się z dowolną lokacją w sieci. Z tego faktu wynika możliwość
czytania przez aplet jakiegokolwiek plikuokreślonego pełną ścieżką dostępu zamiast samej nazwy
pliku. • Aplet może wywołać publiczna metodę każdego innego
aletu znajdującego się na tej samej stronie• Chociaż większość apletów zatrzymuje swoje
wykonywanie kiedy opuści się stronę, wcale nie musi tego robić
• Aplet może odgrywać melodie, w odróżnieniu od aplikacji
Autor Jakub Piechnik
5.”Co wolno wojewodzie ...” - czyli możliwości apletu.
Jeżeli ktoś chciałby bardziej zagłębić się w sprawy bezpieczeństwa apletów polecam dokument pani Marianne
Mueller dostępny pod adresem http://java.sun.com/sfaq
Istnieje duża różnica pomiędzy apletami, które są umieszczone na stronie internetowej i zostały ściągnięte
przez sieć, a apletami znajdującymi się na lokalnym dysku danej maszyny. Różnica ta wynika z tego, że aplet który
ściągany jest przez sieć zostaje ładowany przez class loader’a, a znajujacy się na dysku lokalnym przez file system
loader’a.
Autor Jakub Piechnik
5.”Co wolno wojewodzie ...” - czyli możliwości apletu.
Aplety, które zostały załadowane z dysku lokalnego nie mają narzuconych restrykcji wynikających z działającego Security
Manager’a.Dodatkowo :
• Mogą opuszczać wirtualna maszynę Javy• Nie przechodzą przez weryfikator kodu
6.Std.out, std.err – czyli odpluskwiamy robaczka.
Aplety tak jak inne programy czasami działają nie tak jakbyśmy chcieli. Wyskakują jakieś błędy, aplet robi nie to co powinien, a my jako ojcowie/matki nie wiemy co się dzieje.
Musimy wtedy poddać nasz aplet debuggowaniu w celu usunięcia wszelkich błędów. Przydatne staje się wypisywanie
wszelkich potrzebnych do debuggingu informacji na standardowe wyjście. Dodatkowo aplety mają możliwość
używania standardowego strumienia błędów. Standardowe wyjście używane jest do jeszcze jednego celu – jeżeli
jakikolwiek wyjątek pojawi się podczas wykonywania apletu, a nie zostanie przechwycony, to informacja o nim pojawi się
właśnie na standardowym wyjściu.
Autor Jakub Piechnik
Użycie jest dokładnie takie samo jak w aplikacjach:System.out.print(String)
orazSystem.out.println(String)
Analogicznie dla standardowego strumienia błędów, zastępując System.out na System.err.
To gdzie będą pokazywać się informacje ze standardowego wyjścia i strumienia błędów zależy od tego jak
zaimplementowany jest aplet viewer, na jakiej platformie działa, a czasami nawet od tego jak został uruchomiony
applet viewer, czy przeglądarka.I tak np. uruchamiając Applet Viewer w oknie powłoki
systemu UNIX informacje kierowane na standardowe wyjście i strumień błędów pojawiać się będą w tym właśnie oknie
powłoki (chyba, że przekieruje się wyjście), podobnie uruchamiając Applet Viewer z menu X Windows – informacje będą kierowane do okna konsoli, z drugiej jednak strony, w przeglądarce Netscape Navigator 2.0, wszystkie informacje
kierowane na standardowe wyjście i strumień błędów zapisywane są w Java Console dostępnej z menu Options
przeglądarki.
Autor Jakub Piechnik
6.Std.out, std.err – czyli odpluskwiamy robaczka.
Należy nadmienić, że wypisywanie informacji na standardowe wyjście i strumień błędów jest bardzo wolne.
Można także przekazywać informacje w postaci łańcuchów znakowych do linii statusu. Nie jest jednak zalecane,aby
umieszczać tam krytyczne informacje, ponieważ linia ta jest mało wydajna – może nie być zauważona, przez
użytkownika, inne aplety lub nawet sama przeglądarka może nadpisać informacje zawarte w tej linii. Jest ona przydatna, jeśli np. nasz aplet ma za zadanie wyświetlić kilka zdjęć – można wtedy umieścić w linii statusu informacje, które ze
zdjęć jest obecnie ładowane.
Autor Jakub Piechnik
6.Std.out, std.err – czyli odpluskwiamy robaczka.
Aby wyświetlić informacje w linii statusu, aplet używa metody z klasy java.applet.Applet showStatus.
public void showStatus(String msg)
gdzie msg to wiadomość do wyświetlenia.
7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami.
Aplety mogą się ze sobą komunikować. Jak już wcześniej zostało wspomniane aplet może wywoływać publiczne metody innych apletów znajdujących się na tej samej stronie (w tym
samym oknie przeglądarki). Jednak aby tak się stało aplet musi odnaleźć inny aplet. Odbywa się to według pewnych
ograniczeń narzucanych przez większość przeglądarek:
Autor Jakub Piechnik
• aplety musza pochodzić z tej samej maszyny• aplety powinny pochodzić z tego samego katalogu – ten sam code base
Aby odnaleźć inny aplet – aplet „poszukiwacz” może wywołać dwie metody z interfejsu AppletContext z pakietu java.applet ,
a mianowicie:
getAppletoraz
getApplets
Jeżeli znamy nazwę apletu, który chcemy odnaleźć to zastosujemy pierwszą z nich, a mianowicie
getApplet(nazwaSzukanegoApletu). Metoda ta przeglada wszystkie aplety zawartne na danej stronie i zwraca obiekt typu Applet z referencja do apletu o zadanej nazwie lub null jeśli aplet nie zostanie odnaleziony (domyślnie aplet nie ma żadnej nazwy, dopiero można ja ustalić poprzez podanie parametru NAME
przy umieszczaniu apletu na stronie). Majac już referencje do apletu – poszukiwacz może wywoływać metody publiczne znalezionego apletu np. kazać odnaleźć samego siebie i
zacząć małą pogawędkę międzyapletową.
Autor Jakub Piechnik
7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami.
Druga z metod zwraca listę (Enumeration) z apletami znajdującmi się na stronie. Wywoływana jest bez żadnych
argumentów. Dla bezpieczeństwa w większości przeglądarek jest ona implementowana w ten sposób, że w liście zwracane są tylko te aplety, które pochodzą z identycznej maszyny, z
której aplet wywołujący metodę.
Trzeba dodać, ze wywołanie getApplet(”OLD PAL”) oraz getApplet(”old pal”) powinno przynieść taki sam skutek – zwrócić wskazanie na aplet ”Old
Pal”
Czy jest możliwe, aby komunikowały się ze sobą aplety znajdujące się na różnych stronach, a nawet działające na
różnych maszynach? Jest to możliwe, lecz nie w bezpośredni sposób. Jak już było napisane aplety mogą nawiązywać
połączenie przez sieć tylko z maszyną z której pochodzi ich kod – zatem nic nie stoi na przeszkodzie, aby na tej maszynie działała aplikacja, która nie będzie ograniczona restrykcjami apletów, z którą będzie komunikował się aplet. Pośrednio,
przez właśnie ta aplikacje, aplet będzie miał możliwość zapisu plików na maszynie z której pochodzi, a także komunikacje z
innymi miejscami w sieci – w szczególności z innymi apletami.
Autor Jakub Piechnik
7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami.
Czy istnieje możliwość, aby strona internetowa komunikowała się z apletem umieszczonym na niej? Otóż o dziwo tak. W
przeglądarkach Netscape istnieje LiveConnect. Jest to technologia, która pozawala elementom umieszczonym na
stronie, a napisanych jako skrypty języka JavaScript komunikowanie się z apletami Javy umieszczonymi na tej
stronie.
Autor Jakub Piechnik
7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami.
Ogólnie rzecz biorąc technologia ta pozwala na:
• używanie JavaScript do bezpośredniego dostępu do zmiennych, metod, klas i pakietów Javy
• kontroli appletów lub plug-in’ów Javy przez JavaScript• uzycie kodu Javy do dostępu do metod i cech JavaScript’a
Pojawia się w tym miejscu jeszcze jeden ważny, a nie wspomniany wcześniej znacznik HTML przy umieszczaniu apletu na stronie, a
mianowicie MAYSCRIPT. Pozwala on apletowi na dostęp do JavaScript. Należy użyć tego znacznika, aby nie dopuścić aplet do dostępu do JavaScript bez wiedzy użytkownika. Jeżeli znacznik ten
zostanie ominiety – aplet nie będzie pracował z JS – ale na JS z apletem tak.
LiveConnect pozawala JavaScript na trojakie konmunikowanie się z Javą:
• bezpośrednie wywoływanie metod Javy• kontrolę apletów Javy• kontrolę plug-in’ów JavySzczegółowo omówię tylko kontrole apletów, dla zainteresowanych
pozostałymi aspektami tej technologii przedstawię linki do stron o tej tematyce na końcu tego rozdziału.
7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami.
Autor Jakub Piechnik
Aplet może być kontrolowany przez JavaScrip nawet bez wiadomości o budowie apletu. JavaScript ma dostęp do wszystkich publicznych
zmiennych i metod apletu. Np. można użyć button’ów JavaScript do uruchamiania i zatrzymywania apletu znajdującego się na stronie.
JavaScript przechowuje informacje o apletach umieszczonych na stronie w document.appletName, gdzie appletName jest wartością pole NAME przy umieszczaniu apletu na stronie. Informacje o apletach są zawarte także w tablicy applets do której możemy się odnosić albo poprzez nazwę apletu, albo przez numer – przy czym umieszczony najwyżej ma numer 0. Np. aplet o nazwie
Piechu:• document.Piechu• document.applets[Piechu]• document.applets[0]
Teraz pare słów o komunikacji na odwrót – czyli Java -> JavaScript. Aplety mają dostep do obiektów JavaScript poprzez klasy JSObject oraz JSException z pakietu netscaspe.javascript.
7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami.
Autor Jakub Piechnik
Aby dostać się do obiektów JS najpierw należy najpierw zdobyć uchwyt do okna Nawigatora. Uzyskuje się to poprzez
metodę getWindow() zwracająca obiekt klasy JSObject.
Metoda getMember() pozawala na dostęp do obiektu JS. Przykładowe użycie:
JSObject doc = (JSObject) win.getMember("document");
Istnieją dwie metody pozwalające na wywołanie funkcji JS. Są to:• call(String metodName, Object args[]) – wywołuje metodę JS, adekwatne do this.methodName(args[1], args[2], ...) w JS• Object eval(String s) – ocenia wyrażenie JS; wyrażenie jest
łancuchem znakowym pochodzącym z kodu JS
Załóżmy, że mamy prosty aplet z dwiema metodami publicznymi – check_usr_name() oraz display_next_page().
7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami.
Autor Jakub Piechnik
import java.applet.Applet;import java.lang.*;import netscape.javascript.JSException;import netscape.javascript.JSObject;public class simple_applet extends Applet { JSObject win, doc, form, field;
public void init() { // BE CAREFULL : the form must have been define before the
applet starts // --> <APPLET> tag must be embeded after the form
win = JSObject.getWindow(this);doc = (JSObject)win.getMember("document"); form = (JSObject)doc.getMember("the_form"); field = (JSObject)form.getMember("the_field"); }
public void upper() { String text = (String)field.getMember("value"); System.out.println("Text = " + text);field.setMember("value", text.toUpperCase()); }
public void lower() { String text = (String)field.getMember("value"); System.out.println("Text = " + text); field.setMember("value",text.toLowerCase()); } }
Umieścimy nasz aplet wraz ze skryptem JavyScript na stronie w następujący sposób:
Autor Jakub Piechnik
7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami.
<html> <body> <FORM NAME="the_form">
Enter a text <INPUT TYPE=input NAME="the_field"><P> <INPUT TYPE=button VALUE="Upper„
onClick=document.simple_applet.upper()> <INPUT TYPE=button VALUE="Lower"
onClick=document.simple_applet.lower()> </FORM> <APPLET CODE=simple_applet.class NAME="simple_applet" MAYSCRIPT WIDTH=0 HEIGHT=0></APPLET> </body></html>
Otrzymamy następujący widok w oknie naszej przeglądarki:
7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami.
Autor Jakub Piechnik
Teraz wpisuje w polu tekstowym tekst „Piechu” i naciskam przycisk Upper –
powoduje to wywołanie metody upper() apletu simple_applet, a efekt jej działania przedstawiony jest na
kolejnym rysunku. Jeśli znów nacisnę teraz przycisk Lower – to zostanie wywołana funkcja lower() apletu simple_applet, a z kolei efekt jej działania przedstawiony jest w
kolejnym obrazku.
• http://www-sor.inria.fr/~dedieu/notes/liveconnect/• http://members.ozemail.com.au/~phoenix1/html/livecon.htm• http://wp.netscape.com/eng/mozilla/3.0/handbook/plugins/ind
ex.html
7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami.
Autor Jakub Piechnik
Dla zainteresowanych polecam następujące strony w celu pogłębienia wiedzy na ten temat:
Mimo iż technologia ta opisana jest jako Netscape, ja uruchamiałem pokazane aplety na przeglądarce Internet
Explorer 6.0 i działały one bez zarzutu.
8.Zostań małym Bachem – muzyka w apletach.
• loop – zaczyna odgrywać muzykę w pętli• play – zaczyna odgrywanie muzyki, za każdym razem, gdy
zostanie wywolana zaczyna odtwarzać muzyke od początku.• stop – zaprzestaje grania muzyki
Aplety, w odróżnieniu od aplikacji, mają możliwość odtwarzania muzyki. Jak na razie jedynym dostępnym formatem, który jest wspierany przez Jave jest format
Sun’owski *.au, a mianowicie dźwięk jedno kanałowy, 8 bitowy, law, 8000Hz. Wsparcie dla tego formatu daja klasa
Applet oraz interfejs AudioClip z pakietu java.applet.
Omówmy najpierw interfejs AudioClip. Posiada on tylko trzy metody służące do odtwarzania muzyki. Jednocześnie może
być odtwarzany dźwięk pochodzący z kilku źródeł, wynikowy dźwięk jest zmiksowany, co w efekcie daje
kompozycje. A oto metody interfejsu:
Autor Jakub Piechnik
8.Zostań małym Bachem – muzyka w apletach.
Zajmijmy się teraz przydatnymi do odtwarzania muzyki metodami z klasy Applet.
• getAudioClip – istnieją dwie wersje tej metody: pierwsza z nich wymaga podania obiektu klasy URL zawierającego adres do pliku audio, druga wymaga podania obiektu klasy URL zawierającego adres do bazy z plikami audio oraz łańcucha znaków – nazwy pliku audio; obie metody wracają natychmiast, niezależnie czy plik istnieje czy nie; zwracają obiekt klasy AudioClip dla podanego pliku audio; kiedy aplet będzie chciał odegrać muzykę, dane zostaną załadowane.
• play – istnieją dwie wersje tej metody: parametry przekazywane do nich są analogiczne do metod getAudioClip – URL i ewentualnie nazwa; obie odtwarzają plik audio znajdujący się pod wskazaną lokacją; jeżeli pliku tam nie ma, nie jest wykonywana żadna akcja
Autor Jakub Piechnik
Jak napisałem wcześniej, Java, a w szczególności klasa java.applet.Applet wspomaga odtwarzanie tylko jednego
typu plików muzycznych. Jest to prawda. Jednak w aplikacjach i apletach napisanych w języku Java można
odtwarzać również pliki mulitmedialne innych formatów niż wspomniany wczesniej Sun’owski format *.au. Dzieje się tak za sprawą opcjonalnego pakietu dla Java 2 Standard Edition,
a mianowicie Java Media Framework.
8.Zostań małym Bachem – muzyka w apletach.
Autor Jakub Piechnik
Zainteresowanych odsyłam na stronę:
http://java.sun.com/products/java-media/jmf/
gdzie znajdą więcej informacji na temat JMF oraz szereg przykładówzastosowania oraz możliwość zobaczenia w akcji JMF.
9.”Masz jakieś wątki?” – wątki w apletach.
Nie ma nic wyjątkowego w wątkach w apletach – tworzy się je w dokładnie taki sam sposób jak w aplikacjach. Przyjrzyjmy
się jednak jak wygląda to z punktu widzenia przeglądarki.
Autor Jakub Piechnik
Przeglądarka wgrywając aplet tworzy dla niego osobny wątek, który jest wykorzystywany dla wywołania głównych
metod apletu, takich jak init, start, stop czy destroy. Czasami przeglądarki tworzą grupę wątków dla danego paletu. Jeżeli na stronie znajduje się kilka apletów, to
przeglądarka tworzy osobny watek dla każdego.
Trzeba pamiętać, że wątki utworzone przez aplet nie są wykańczane w momencie zakończenia głównego wątku apletu
– dlatego też każdy programista samemu musi zadbać, aby jego aplet nie był wciąż aktywny, nawet po wyłączeniu
przeglądarki, bądź applet viewer’a.
Ale dlaczego właściwie używać w aplecie wątków? A więc tak – załóżmy, że mamy aplet, który ma odgrywać rożne
melodie, tworząc z nich jedna całość. Jeżeli za ładowanie wszystkich melodii będzie odpowiedzialna funkcja init to
użytkownik może mieć wrażenie, że aplet się zawiesił – nie będzie żadnej reakcji na działanie użytkownika, ponieważ wątek wywołujący metodę init nie może nic zrobić zanim
metoda nie powróci. To może powodować zdenerwowanie użytkownika. Lepszym rozwiązaniem w tej sytuacji jest
stworzenie wątków odpowiedzialnych za wgrywanie muzyczek – tak, że w każdej chwili na działanie użytkownika,
jest reakcja.
Autor Jakub Piechnik
9.”Masz jakieś wątki?” – wątki w apletach.
10.Dobre rady dziadzia Piecha
• Czy usunąłeś, zablokowałeś wszystkie wyjścia debuggingu?debugging, użyteczny dla Ciebie, jest mylacy i denerwujący dla użytkowników.
• Czy aplet wstrzymuje swoje działanie jeśli nie ma go na ekranie? aplet, który nie jest wyświetlany nie powinien zajmować zasobów procesora, dodatkowo, jeżeli aplet używa wątków to jeżeli nie ma jakiejś poważnej przyczyny, powinny być one wstrzymane.
• Jeżeli aplet wykonuje czynności, które mogą być irytujące dla użytkownika np. granie muzyki, etc., to czy daje możliwości do zatrzymania takiej akcji? Użytkownik, który nie będzie miał takich możliwości zdenerwuje się i nie będzie korzystał z Twoich apletów.
Autor Jakub Piechnik
Kończąc jeszcze tylko parę rad, jak efektywnie pisać aplety i jak ewentualnie rozwiązywać powstałe problemy.
Zanim cały świat dowie się jak wspaniały jest Twój aplet odpowiedz
sobie na następujące pytanie:
Było o tym co zrobić, żeby użytkownik nie chciał Cię zlikwidować za stworzony aplet, teraz trochę o tym, aby
uczynić aplet jak najbardziej „sympatycznym”.
• Uczyń swój aplet tak elastycznym jak tylko się da – można to uczynić poprzez definiowanie parametrów; przy kilkukrotnym użyciu apletu w różnych sytuacjach, będziesz miał mniej roboty.
• Zaimplementuj metodę getParameterInfo – uczyni to aplet łatwiejszym do ustawiania dla użytkownika; chociaż żadna z przeglądarek nie używa obecnie tej metody, ale oczekuje sie, że wkrótce będzie ona używana przez przeglądarki, aby stworzyć GUI, które w interaktywny sposób pozwoli na ustawienie parametrów apletu.
10.Dobre rady dziadzia Piecha
Autor Jakub Piechnik
• Zaimplementuj metodę getAppletInfo – zwraca ona krótka informacje w postaci łańcuch znaków o aplecie; obecnie żadna przeglądarka jej nie używa, ale oczekuje się, że wkrótce będą; implementacja tej metody w klasie Applet zwraca null.
10.Dobre rady dziadzia Piecha
Autor Jakub Piechnik
Oto przykładowa implementacja tej metody:
public String getAppletInfo() {
return „Aplet Symulacja skrzyżowania made by Piechu"; }
Na zakończenie
Ważnym, a może nawet najważniejszym elementem apletu jest tzw.GUI czyli Graphical User Interface – ale o tym opowie
już Jacek w następnym referacie.
Autor Jakub Piechnik
Od pisania apletów niedaleko już do tworzenia aplikacji w J2ME czyli aplikacji na urządzenia przenośne – najczęściej
rozumiane jako komórki.
Bibliografia
• kurs pisania apletów na http://java.sun.com/docs/books/tutorial/applet/
• dokumentacja Javy na stronach Sun’a• Bruce Eckel „Thinking in Java”• inne źródła internetowe• własna wyobraźnia • wcześniej wygłoszone referaty
Przy tworzeniu niniejszego referatu korzystałem z:
Autor Jakub Piechnik