Programowania zdarzeniowe W1 Technologia Applet AWT

background image

Mariusz Chmielewski

1

Programowanie

Zdarzeniowe

Technologia Java Applet

Komponenty AWT

Delegacyjny model

zdarzeń

kpt. mgr inż. Mariusz Chmielewski

Instytut Systemów Informatycznych

Wydział Cybernetyki

Wojskowa Akademia Techniczna

background image

Mariusz Chmielewski

2

Koncepcja

• Język Java został adoptowany do

wykorzystania w połączeniu z

HTML, do tworzenia

specjalnych programów

uruchamianych przez przeglądarki

HotJava na komputerach

klienckich.

• Aplety różnią się w porównaniu ze

standardowymi aplikacjami Javy

przede wszystkim środowiskiem

wykonania. Inne różnice dotyczą

struktury programu oraz sposób

jego uruchomienia.

• W aplikacji wykonanie rozpoczyna

się się od uruchomienia metody

main(), natomiast applet definiuje

specyficzną strukturę metod

pozwalających środowisku

uruchomieniowemu

przeprowadzanie

zaimplementowanych operacji w

zależności od stan appletu.

background image

Mariusz Chmielewski

3

Schemat wykonania appletu ładowanego z

zasobów sieciowych

• Technologia appletów rozszerza

dokumenty HTML, udostępniając

możliwości prezentacji animacji,

dźwięku oraz innych efektów

specjalnych. Definiowanie specjalnego

schematu metod przez applet jest

spowodowane konstrukcją przeglądarki

HotJava, która pozwala na

wykorzystanie odpowiednich

interfejsów do komunikacji z appletem.

background image

Schemat wykonania appletu ładowanego z

zasobów sieciowych

• Wykonanie appletu składa się z

następujących faz:

– przeglądarka generuje żądanie do modułu

ładującego (loadera) aby dostarczył klasę
appletu do którego odwołanie znajduje się w
kodzie HTML.

– W momencie pełnego załadowania

wymaganego kodu, następuje wykonanie
appletu. Wykonanie kodu następuje w
interpreterze dołączonym do przeglądarki.

– Przeglądarka działa jako kanał komunikacji

pomiędzy Maszyną Wirtualną wewnątrz
interpretera oraz interfejsem użytkownika.

Mariusz Chmielewski

4

background image

Mariusz Chmielewski

5

Schemat wykonania appletu ładowanego z

zasobów sieciowych

• Klasa Applet  dostarcza wymaganego szkieletu oraz narzędzi

dostępu do funkcjonalności dostarczanej przez przeglądarkę. Z

wykorzystaniem HotJava applet uzyskuje dostęp do grafiki,

dźwięku oraz operacji sieciowych.

• W odróżnieniu od aplikacji applet nie zaczyna działania od

metody main(). Cykl życia apletu wyznaczają cztery metody

zdefiniowane w klasie Applet: init(), start(), stop() i destroy().

• Kod HTML wykorzystuje znacznik appletu (applet tag) by

pozyskać wszystkie możliwe jego dane

Przykład:

<APPLET CODE = "lights.class" width=400 height=75

align=center >

<PARAM NAME="text" VALUE="Blink">

<BLOCKQUOTE>

<HR>

If you were using a Java(tm)-enabled browser,

you would see blinking lights instead of this paragraph.

<HR>

</BLOCKQUOTE>

</APPLET>

background image

Mariusz Chmielewski

6

Szkielet appletu

• Applet jest specyficznym oprogramowaniem

uruchamianym w środowisku przeglądarki

HotJava. Wewnątrz środowiska przeglądarki

applet korzysta z możliwości wyświetlania

obrazów, odtwarzania plików dźwiękowych oraz

dostęp do Internetu.

• Ze względu na to, że applet jest wykonywany

lokalnie na maszynie klienta, wyposażony jest

bezpośrednio w możliwość interakcji z

przeglądarką stając się częścią strony

internetowej. Oparcie interaktywności stron

WWW o applety umożliwia korzystanie z

właściwości wykonania środowiska lokalnego

(wykorzystanie CGI wymusza przesyłanie danych

do serwera i wykonywanie żądań po stronie

serwera).

• Zastosowanie technologii appletów zwiększa

interaktywność oprogramowania, dodatkowo

zwiększając wydajność przetwarzania, ze

względu na odciążenie serwera w ramach

przetwarzania żądań.

• Wszystkie informacje o stanach wewnętrznych

środowiska przeglądarki rezydują lokalnie na

maszynie klienta i nie są przesyłane pomiędzy

przeglądarką a serwerem WWW.

background image

Mariusz Chmielewski

7

Szkielet appletu

Główne metody sterujące w trakcie wykonania appletu -  init, start, stop,

destroy oraz metoda paint:

init - wywoływana tylko raz, podczas ładowania strony WWW

zawierającej applet (pierwsze ładowanie), jeśli opuścimy stronę WWW

zawierającą applet i wrócimy na nią (przełączanie zadań), metoda init nie

będzie wywołana ponownie,

start - metoda wywoływana za każdym razem, w momencie gdy strona

zawiera applet i staje się stroną bieżącą w przeglądarce,

stop - metoda wywoływana w momencie, gdy następuje ładowanie innej

strony WWW w przeglądarce,

destroy - wykonywana, gdy applet kończy swoje działanie.

Podane metody nie muszą być nadpisywane, istnieje możliwość

korzystania z dostarczanych przez samą klasę Applet reprezentacji tych

metod (skazani jesteśmy jednak w takim przypadku na ograniczenie

funkcjonalności appletu).

background image

Mariusz Chmielewski

8

Szkielet appletu

• Metoda init powinna

implementować funkcjonalność

zawieraną w konstruktorach.

Odpowiada ona bowiem za

inicjalizację appletu (pozyskanie

dodatkowych zasobów). Pomimo

tego, że applet posiada

konstruktor to nie gwarantuje on,

że dostępne jest całe środowisko

potrzebne do inicjalizacji apletu.

Metoda ładująca grafikę oraz

dźwięk nie jest dostępna w

konstruktorze apletu, a więc

pozyskanie tych zasobów powinno

odbywać się w metodzie init.

• Metoda start jest z

reguły nadpisywana w

implementowanym applecie. Jej

zadaniem jest definicja logiki

appletu,

uruchamiania ewentualnych

wątków, realizujących pracę

apletu (animacja grafiki = wątek

zmieniający położenie elementów

na ekranie i odrysowujący

grafikę).  

Model

zdarzeniowy

Model

zdarzeniowy

background image

Mariusz Chmielewski

9

• Definiowanie metody start

implikuje definicję metody

stop, wstrzymującej

wykonanie appletu, ale nie

zwalniającej potrzebnych

zasobów zajętych przez

wykonywany program.

Funkcjonalność tej metody

może być wykorzystana do

zawieszenie wątków,

działających w tle,

służących do

odrysowywania obiektów

graficznych na ekranie.

• Użycie metody destroy jest

możliwe w przypadku

appletów, które wymagają

jawnego zwolnienia zajętych

w metodzie init zasobów.

Kontrolowanie

wykorzystania zajętości

pamięci jest o tyle ważne,

że w przypadku stron, na

których znajduje się wiele

appletów może spowodować

błędy dostępności zasobów

(pamięć itd.).

background image

Mariusz Chmielewski

10

Szkielet appletu - praktyczny przykład

import java.applet.Applet;

import java.awt.Graphics;

import java.awt.Font;

public class AppletMethodTest extends Applet {

private int m_metodaInit;

private int m_metodaStart;

private int m_metodaStop;

private int m_metodaDestroy;

private int m_metodaPaint;

private Font font;

public void init() {

font = new Font("Arial", Font.BOLD , 20);

m_metodaInit = dodajInfo(m_metodaInit);

}

public void start() {

m_metodaStart = dodajInfo(m_metodaStart);

}

public void stop() {

m_metodaStop = dodajInfo(m_metodaStop);

}

public void destroy() {

m_metodaDestroy = dodajInfo(m_metodaDestroy);

}

private int dodajInfo(int i) {

repaint();

return ++i;

}

public void paint(Graphics g) {

g.setFont(font);

this.setSize(400,200);

//Rysowanie ramki otaczającej aplet

g.drawRect(0, 0, size().width - 1, size().height - 1);

//rysowanie odpowiednich łańcuchów znakowych (w ramce)

g.drawString("Wywołań metody init : " + m_metodaInit, 10, 20);

g.drawString("Wywołań metody start : " + m_metodaStart, 10, 50);

g.drawString("Wywołań metody stop : " + m_metodaStop, 10, 80);

g.drawString("Wywołań metody destroy: " + m_metodaDestroy, 10, 110);

g.drawString("Wywołań metody paint : " + m_metodaPaint, 10, 140);

}

}

Przedstawiony applet prezentuje bardzo
okrojoną funkcjonalność pozwalającą na
zliczanie liczby wywołań poszczególnych metod
w trakcie jego działania i prezentacji jej na
ekranie przeglądarki. Korzystanie z opcji
dostarczanych przez przeglądarkę (ewentualnie
program appletviewer.exe) pozwala na zmianę
stanu appletu przechodząc przez poszczególne
etapy jego cyklu życia.

background image

Mariusz Chmielewski

11

Metody rysujące elementy graficzne

• Oprócz metod definiujących elementy w cyklu

życia appletu, definiowane są metody

odpowiadające za graficzny dostęp do okna

przeglądarki.

• Do grupy tych metod zaliczamy : metodę paint

oraz update. Pierwsza pozwala na nanoszenie

elementów GUI (pozostałych prymitywów

graficznych) korzystając z okna przeglądarki,

metoda update pozwala na czyszczenie kolorem

tła obszaru okna przeglądarki.

• Brak jawnej definicji metody update powoduje

wystąpienie efektu migotania grafiki w trakcie jej

ciągłego odrysowywania (animacje). Jednym ze

sposobów wyeliminowania tego niepożądanego

efektu jest nadpisanie metody update tak, aby

usuwała "czyściła" wybrane elementy,

przeznaczone do usunięcia.

background image

Mariusz Chmielewski

12

Metody rysujące elementy graficzne

import java.applet.*;

import java.awt.*;

 

public class AnimationApplet extends Applet implements Runnable {

private int koloX = 20, koloY = 30;

private int kwX = 140, kwY = 100;

private int kolodX = 10, kolodY = 10;

private int kwdX = 2, kwdY = 2;

// wątek obliczający dane do animacji

private Thread animWatek;

// czcionka w której wyprowadzane są na ekran napisy

private Font font;

public void init() {

// ustawienie czcionki (typ, rodzaj, wielkość) w której

// będą wyświetlane napisy

font = new Font("Arial", Font.BOLD, 20);

}

public void start() {

//powołaj

if (animWatek == null)

animWatek = new Thread(this, "Applet animacyjny");

animWatek.start();

}

public void stop() {

if (animWatek != null)

animWatek.stop();

animWatek = null;

System.gc();

}

background image

Metody rysujące elementy

graficzne

Mariusz Chmielewski

13

public void run() {

// zmienna lewo określa czy współrzędne mają być obliczane dla

// przesuwania napisów w lewo(oraz dół) czy w prawo(oraz góra)
boolean lewo = true;

while (Thread.currentThread() == animWatek) {

if (!((koloX > 0) && (koloX < this.size().width - 40)))

kolodX = -kolodX;

if (!((koloY > 0) && (koloY < this.size().height - 40)))

kolodY = -kolodY;

if (!((kwX > 0) && (kwX < this.size().width - 50)))

kwdX = -kwdX;

if (!((kwY > 0) && (kwY < this.size().height - 50)))

kwdY = -kwdY;

koloX = koloX + kolodX;

koloY = koloY + kolodY;

kwX = kwX + kwdX;
kwY = kwY + kwdY;

repaint();

try {

Thread.sleep(10);

} catch (InterruptedException e) {

}

}

}

public void paint(Graphics g) {

// wołamy update, ponieważ AWT niekiedy

// woła paint() bezpośrednio

update(g);

}

public void update(Graphics g) {

g.setFont(font);

g.setColor(Color.white);
g.fillRect(0, 0, this.size().width, this.size().height);

g.setColor(Color.red);

g.fillOval(koloX, koloY, 40, 40);
g.setColor(Color.blue);

g.fillRect(kwX, kwY, 50, 50);

}}

background image

Mariusz Chmielewski

14

Zdarzenia - delegacyjny model zdarzeń

• Obecny model obsługi zdarzeń w AWT (Abstract

Window Toolkit) oparty jest na modelu tzw.

delegowania obsługi zdarzeń, charakteryzującym

się większą wydajnością w porównaniu z

poprzednią koncepcją opartą na dziedziczeniu.

• Delegacyjny model obsługi zdarzeń korzysta z

możliwości wykorzystania dowolnych obiektów,

które implementują odpowiedni interfejs

nasłuchujący (ang. listener interface).

• Jeden lub kilka obiektów klas nasłuchujących,

może zostać zarejestrowany do obsługi różnego

rodzaju zdarzeń pochodzących z różnych źródeł

(interakcje klawiatury, myszki).

• Delegacyjny model zdarzeń pozwala zarówno na

obsługę, jak i na generowanie zdarzeń.

background image

Mariusz Chmielewski

15

Zdarzenia - delegacyjny model zdarzeń

import java.applet.*;
import java.awt.*;

import java.awt.event.*;
 

public class AppletObsługaZdarzen extends Applet implements ActionListener {
 

//nowy komponent, pole tekstowe w którym będzie wyświtlana
// historia wszystkich wykonanych przez nas w aplecie operacji

private TextArea txtHistory = new TextArea(5, 20);

 

private Panel gridLayoutPanel() {

// implementacja odpowiedniego zarządcy rozmieszczenia
// elementów na ekranie

}

 

public void init() {

// nowe elementy metody init

// dodajemy na "zachodzie" apletu pole tekstowe
add("North", txtHistory);
txtHistory.setFont(new Font("Arial", Font.BOLD, 10));

}

 

public void actionPerformed(ActionEvent evt) {

// implementacja metody pozwalajacej

// na zadeklarowanie reakcji na przychodzące
// zdarzenia i wypisanie ich w komponencie txtHistory
// (metoda getActionCommand)

txtHistory.append(evt.getActionCommand()+ "\n");

}

}

background image

Mariusz Chmielewski

16

Zdarzenia - delegacyjny model zdarzeń

1. Deklaracja klasy (przeznaczonej do obsługi) implementującej

odpowiedni interfejs nasłuchujący (lub dziedziczącą z klasy, która ten

interfejs implementuje).

        public class MojAplet extends Applet implements ActionListener

2. Rejestracja dla danego komponentu obiektu klasy nasłuchującej: 

          klasaŹródłoZdarzeń.addRodzajNasłuchu(obiektKlasyNasłuchującej);

oznacza, że dla obsługi zdarzeń generowanych przez obiekt klasaŹródłoZdarzeń,

zarejestrowano obiekt obiektKlasyNasłuchującej implementujący interfejs

nasłuchujący (definiowany przez RodzajListener).

W wywołanie: 

     obiektKlasy.addActionListener(this);

jako obiekt klasy nasłuchującej rejestruje sam siebie (implementuje dany interfejs

nasłuchujący ActionListener).

3. Implementacja metod z interfejsu nasłuchującego.

Interfejs ActionListener posiada tylko jedną metodę do implementacji:

   public void actionPerformed(ActionEvent evt) {

       // deklaracja reakcji na zdarzenia

  }

W modelu delegacyjnym Java definiuje bogaty zestaw interfejsów nasłuchujących,

metody każdego z tych interfejsów umożliwiają reakcję na zdarzenie określonego

typu.

background image

Mariusz Chmielewski

17

Zestawienie generowanych typów

zdarzeń

background image

Mariusz Chmielewski

18

Zestawienie generowanych typów

zdarzeń

background image

Mariusz Chmielewski

19

Zestawienie generowanych typów

zdarzeń

background image

Mariusz Chmielewski

20

Ograniczenia mechanizmu appletów

• Założeniem technologii appletów były również

względy bezpieczeństwa. Appety są

oprogramowaniem ściąganym z serwera WWW

na stację kliencką i uruchamiane w środowisku

przeglądarki, a więc wydają się być technologią

idealną dla rozwoju wirusów i oprogramowania

pozwalającego na nieuprawniony dostęp do

zasobów systemowych. Aby bronić się przed

takim dostępem wprowadzono dodatkowe

ograniczenia, w tym celu powołano obiekt

zarządcy bezpieczeństwa (SecurityManager)

mającego za zadanie kontrolowanie procesu

dostępu do zasobów. W przypadku, gdy zasady

bezpieczeństwa są naruszane, obiekt zarządcy

wywołuje wyjątek SecutityException.

background image

Mariusz Chmielewski

21

Ograniczenia mechanizmu appletów

Aplety muszą spełniać następujące zasady

bezpieczeństwa (spełnienie tych zasad jest

kontrolowane przez zarządców bezpieczeństwa

poszczególnych przeglądarek):

1. Aplety nie mają prawa ładowania bibliotek (Java Native

Interface - metody native). Mogą one korzystać jedynie ze

swego własnego kodu Javy odnoszącego się do elementów

Java API dostarczonych przez przeglądarkę. Każda

przeglądarka zgodna z HotJava dostarcza Java API.

2. Applety nie mogą nawiązywać połączeń sieciowych poza

połączeniami z serwerem, z którego zostały załadowane.

Applet może jednak kontaktować się z innymi serwerami

poprzez komunikację z aplikacją działającą na serwerze

(CGI servlety), z którego applet załadowano.

3. Zapis i odczyt plików na komputerze klienckim jest

wzbroniony (w wypadku, kiedy ustawiamy prawa dostępu

SecurityManager możemy taki dostęp uzyskać). Applety w

przeglądarce mogą odczytywać pliki wyspecyfikowane

przez URL. Zapis danych realizowany jest z

wykorzystaniem zasobów serwera z którego kod appletu

został załadowany.

background image

Mariusz Chmielewski

22

Ograniczenia mechanizmu appletów

4. Applet nie może tworzyć środowiska wykonania dla

zewnętrznych programów uruchamianych na komputerze

klienckim. W przypadku, gdy taka operacja jest wymagana

applet może wywołać usługę serwera, z którego został

załadowany i wykorzystując jego zasoby uruchomić

wymagane oprogramowanie.

5. Applet nie może czytać wszystkich właściwości systemu

(ang. system properities). Aplety mogą czytać jedynie

okrojone właściwości systemu:

 - file.separator;

 - java.class.version;

 - java.vendor;

 - java.vendor.url;

 - java.version;

 - line.separator;

 - os.arch;

 - os.name;

 - path.separator;


Document Outline


Wyszukiwarka

Podobne podstrony:
Programowanie zdarzeniowe W1 Wprowadzenie
Porównanie SWT AWT SWING, Studia, WAT Informatyka, Pz - programowanie zdarzeniowe
00 Program nauki Technik technologii żywności 321 09
00 Program nauki Technik techno Nieznany (3)
C++ programowanie zdarzeniowe
Programowanie obiektowe, w1, 1
Teksty programow Zdarzenie1
Programowanie zdarzeniowe kontakt, zaliczenie
00 Program nauki Technik techno Nieznany (4)
C programowanie zdarzeniowe
00 Program nauki Technik technologii drewna 311 32
00 Program nauki Technik technologii szkła 311 33
Programowania zdarzeniowe W2 SWING Listeners
00 Program nauki Technik technologii chemicznej 311 31
00 Program nauki Technik technologii żywności 321 09
INFORMATYKA TECHNOLOGIA tresci programowe, Informatyka

więcej podobnych podstron