1 / 47

Referat z przedmiotu Języki i techniki programowania II Aplety

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.

elaina
Download Presentation

Referat z przedmiotu Języki i techniki programowania II Aplety

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Referat z przedmiotu Języki i techniki programowania IIAplety 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. Merriam Webster "Collegiate Edition" w roku 1990 podała taką definicję: krótka aplikacja szczególnie do wykonywania prostych, specyficznych zadań. Autor Jakub Piechnik

  4. 2.Jak umieścić to „coś” na stronie. <HTML> <HEAD> <TITLE> Aplet Hello World</TITLE> </HEAD> <BODY> Oto co wypisuje program: <APPLET CODE="HelloWorld.class" WIDTH=150 HEIGHT=25> </APPLET> </BODY> </HTML> 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”: Umieszczenie apletu zawarte jest pomiędzy znacznikami <APPLET>...</APPLET> Autor Jakub Piechnik

  5. 2.Jak umieścić to „coś” na stronie. 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. Teraz przyjrzyjmy się bliżej jakie „opcje” musi, może posiadać Umieszczenie apletu na stronie. Autor Jakub Piechnik

  6. 2.Jak umieścić to „coś” na stronie. < APPLET [CODEBASE =codebaseURL] CODE =appletFile [ALT =alternateText] [NAME =appletInstanceName]WIDTH =pixelsHEIGHT =pixels [ALIGN =alignment] [VSPACE =pixels] [HSPACE =pixels] > [< PARAM NAME =appletParameter1VALUE =value>] [< PARAM NAME =appletParameter2VALUE =value>] . . . [alternateHTML]</APPLET> Mamy następujący zapis: 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. Autor Jakub Piechnik

  7. 2.Jak umieścić to „coś” na stronie. 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 =pixelsHEIGHT =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

  8. 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 =pixelsHSPACE =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 =appletParameter1VALUE =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

  9. 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> 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” 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. Autor Jakub Piechnik

  10. 3.Co mówisz? - czyli przekazywanie parametrów. Jest to jedyna możliwa metoda przekazywania parametrów bezpośrednio do apletu przez użytkownika. 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. 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. Autor Jakub Piechnik

  11. 3.Co mówisz? - czyli przekazywanie parametrów. 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

  12. 3.Co mówisz? - czyli przekazywanie parametrów. public String[][] getParameterInfo() { String[][] info = { {"fps", "1-100", „klatki na sekundę"}, }; return info; } 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: 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. Autor Jakub Piechnik

  13. 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 3.Co mówisz? - czyli przekazywanie parametrów. Oto informacje sytemowe, które może uzyskać aplet: 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

  14. 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 3.Co mówisz? - czyli przekazywanie parametrów. A to te których czytać nie może: 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

  15. 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. Autor Jakub Piechnik

  16. 4.Życie pana A. – czyli init/start/stop/destroy. 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. 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

  17. 4.Życie pana A. – czyli init/start/stop/destroy. 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. 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. Autor Jakub Piechnik

  18. 4.Życie pana A. – czyli init/start/stop/destroy. 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. Implementacja czterech powyższych metod dostarczonych w klasie java.applet.Applet nie wykouje żadnych czynności. Autor Jakub Piechnik

  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 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. 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. Autor Jakub Piechnik

  20. 5.”Co wolno wojewodzie ...” - czyli możliwości apletu. 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

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

  22. 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 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. Autor Jakub Piechnik

  23. 5.”Co wolno wojewodzie ...” - czyli możliwości apletu. 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 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 Autor Jakub Piechnik

  24. 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 : 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. • Mogą opuszczać wirtualna maszynę Javy • Nie przechodzą przez weryfikator kodu Autor Jakub Piechnik

  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. 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. Autor Jakub Piechnik

  26. 6.Std.out, std.err – czyli odpluskwiamy robaczka. 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. Należy nadmienić, że wypisywanie informacji na standardowe wyjście i strumień błędów jest bardzo wolne. Autor Jakub Piechnik

  27. 6.Std.out, std.err – czyli odpluskwiamy robaczka. 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. 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. Autor Jakub Piechnik

  28. 7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami. • aplety musza pochodzić z tej samej maszyny • aplety powinny pochodzić z tego samego katalogu – ten sam code base 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: Aby odnaleźć inny aplet – aplet „poszukiwacz” może wywołać dwie metody z interfejsu AppletContext z pakietu java.applet , a mianowicie: getApplet oraz getApplets Autor Jakub Piechnik

  29. 7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami. 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ą. Trzeba dodać, ze wywołanie getApplet(”OLD PAL”) oraz getApplet(”old pal”) powinno przynieść taki sam skutek – zwrócić wskazanie na aplet ”Old Pal” 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ę. Autor Jakub Piechnik

  30. 7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami. 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

  31. 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 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. 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. Autor Jakub Piechnik

  32. 7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami. 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. 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. 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] Autor Jakub Piechnik

  33. 7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami. 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: 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. 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 Autor Jakub Piechnik

  34. 7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami. 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()); } } Załóżmy, że mamy prosty aplet z dwiema metodami publicznymi – check_usr_name() oraz display_next_page(). Autor Jakub Piechnik

  35. 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> Umieścimy nasz aplet wraz ze skryptem JavyScript na stronie w następujący sposób: Autor Jakub Piechnik

  36. 7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami. 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. Otrzymamy następujący widok w oknie naszej przeglądarki: Autor Jakub Piechnik

  37. 7.”Jak mnie słyszysz.Over...” – komunikacja miedzy apletami. 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. • 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/index.html Dla zainteresowanych polecam następujące strony w celu pogłębienia wiedzy na ten temat: Autor Jakub Piechnik

  38. 8.Zostań małym Bachem – muzyka w apletach. 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. • 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 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. 8.Zostań małym Bachem – muzyka w apletach. 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. 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ów zastosowania oraz możliwość zobaczenia w akcji JMF. Autor Jakub Piechnik

  41. 9.”Masz jakieś wątki?” – wątki w apletach. 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. 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. 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. Autor Jakub Piechnik

  42. 9.”Masz jakieś wątki?” – wątki w apletach. 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

  43. 10.Dobre rady dziadzia Piecha  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: • 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

  44. 10.Dobre rady dziadzia Piecha  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. Autor Jakub Piechnik

  45. 10.Dobre rady dziadzia Piecha  • 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. Oto przykładowa implementacja tej metody: • public String getAppletInfo() • { • return „Aplet Symulacja skrzyżowania made by Piechu"; • } Autor Jakub Piechnik

  46. Na zakończenie Od pisania apletów niedaleko już do tworzenia aplikacji w J2ME czyli aplikacji na urządzenia przenośne – najczęściej rozumiane jako komórki. 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

  47. Bibliografia Przy tworzeniu niniejszego referatu korzystałem z: • 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 Autor Jakub Piechnik

More Related