Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Referat z przedmiotu Języki i techniki programowania II Aplety Autor Jakub Piechnik.

Podobne prezentacje


Prezentacja na temat: "Referat z przedmiotu Języki i techniki programowania II Aplety Autor Jakub Piechnik."— Zapis prezentacji:

1 Referat z przedmiotu Języki i techniki programowania II Aplety Autor Jakub Piechnik

2 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

3 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ń.

4 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 Aplet Hello World Oto co wypisuje program: Umieszczenie apletu zawarte jest pomiędzy znacznikami...

5 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.

6 [ ] [ ]... [alternateHTML] 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.

7 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.

8 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. opcjonalne argumenty - przekazują parametry do apletu. alternateHTML opcjonalne – jeżeli przeglądarka nie wspiera technologii Javy i nie rozumie znaczników 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.

9 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. 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.

10 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.

11 Aplety aby uzyskać informacje o wartościach danych parametrów uż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.

12 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.

13 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: KluczZnaczenie file separatorSeparator plików np. / java.class.versionNumer wersji klasy javy java.vendorSprzedawca javy java.vendor.urlUrl do sprzedawcy javy java.versionNumer wersji javy line.separatorSeparator linii os.archArchitektura systemu operacyjnego os.nameNazwa systemu operacyjnego os.versionWersja systemu operacyjnego path.separatorSeparator ścieżki

14 Autor Jakub Piechnik 3.Co mówisz? - czyli przekazywanie parametrów. A to te których czytać nie może: KluczZnaczenie java.class.pathJava classpath java.homeKatalog instalacyjny Javy user.dirAktualny katalog użytkownika user.homeDomowy katalog użytkownika user.nameNazwa 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.

15 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.

16 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.

17 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.

18 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.

19 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 viewery posiadają takie obiekty. I tak np. podczas wywołania metody exit z klasy System – po pierwsze wywoływana jest metoda checkExit Security Managera 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 viewerach 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.

20 Zobaczmy teraz dokładniej restrykcje wobec apletów narzucaja obecne przeglądarki i aplet viewery: 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 viewera (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.

21 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

22 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. ArgumentOpis _selfPokaż w oknie które zawiera aplet _parentPokaż w oknie rodzicielskim apletu, jeżeli takowego nie ma działa tak samo jak _self _topPokaż w oknie top-level okna apletu; jeśli okno apletu jest top-level działa tak samo jak _self _blankPokaż w nowym nie nazwanym oknie top-level namePokaż dokument w oknie o nazwie name; jeśli docelowa nazwa jeszcze nie istnieje to tworzony jest nowe okno top-level o nazwie nazwa

23 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 pliku okreś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

24 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 loadera, a znajujacy się na dysku lokalnym przez file system loadera. 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 Managera. Dodatkowo : Mogą opuszczać wirtualna maszynę Javy Nie przechodzą przez weryfikator kodu

25 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) oraz System.out.println(String) Analogicznie dla standardowego strumienia błędów, zastępując System.out na System.err.

26 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.

27 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.

28 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: getApplet oraz getApplets

29 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

30 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.

31 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 JavaScripta 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.

32 LiveConnect pozawala JavaScript na trojakie konmunikowanie się z Javą: bezpośrednie wywoływanie metod Javy kontrolę apletów Javy kontrolę plug-inów Javy Szczegół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]

33 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

34 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 // --> 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()); } }

35 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. Enter a text

36 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.

37 ex.htmlhttp://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.

38 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 Sunowski *.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

39 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

40 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 Sunowski 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ę: gdzie znajdą więcej informacji na temat JMF oraz szereg przykładów zastosowania oraz możliwość zobaczenia w akcji JMF.

41 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 viewera.

42 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.

43 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:

44 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

45 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"; }

46 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.

47 Bibliografia kurs pisania apletów na dokumentacja Javy na stronach Suna 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


Pobierz ppt "Referat z przedmiotu Języki i techniki programowania II Aplety Autor Jakub Piechnik."

Podobne prezentacje


Reklamy Google