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

Referat z przedmiotu Języki i techniki programowania II Aplety

  • 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

Page 1: Referat z przedmiotu Języki i techniki programowania II Aplety

Referat z przedmiotu Języki i techniki programowania II

Aplety

Autor Jakub Piechnik

Page 2: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 3: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 4: Referat z przedmiotu Języki i techniki programowania II Aplety

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>

Page 5: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 6: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 7: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 8: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 9: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 10: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 11: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 12: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 13: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 14: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 15: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 16: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 17: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 18: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 19: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 20: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 21: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 22: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 23: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 24: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 25: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 26: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 27: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 28: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 29: Referat z przedmiotu Języki i techniki programowania II Aplety

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”

Page 30: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 31: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 32: Referat z przedmiotu Języki i techniki programowania II Aplety

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]

Page 33: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 34: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 35: Referat z przedmiotu Języki i techniki programowania II Aplety

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>

Page 36: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 37: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 38: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 39: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 40: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 41: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 42: Referat z przedmiotu Języki i techniki programowania II Aplety

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.

Page 43: Referat z przedmiotu Języki i techniki programowania II Aplety

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:

Page 44: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 45: Referat z przedmiotu Języki i techniki programowania II Aplety

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

Page 46: Referat z przedmiotu Języki i techniki programowania II Aplety

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.