Pakiety Javy, Java - PowerPoint PPT Presentation

1 / 40
About This Presentation
Title:

Pakiety Javy, Java

Description:

Pakiety Javy, Java Wyk ad 6 mgr in . Micha Misiak Plan wyk adu Obs uga wej cia/wyj cia (I/O API) Kolekcje Aplety Podstawy obs ugi wej cia/wyj cia Mechanizm ... – PowerPoint PPT presentation

Number of Views:64
Avg rating:3.0/5.0
Slides: 41
Provided by: Michal66
Category:

less

Transcript and Presenter's Notes

Title: Pakiety Javy, Java


1
Pakiety Javy, Java
  • Wyklad 6

mgr inz. Michal Misiak
2
Plan wykladu
  • Obsluga wejscia/wyjscia (I/O API)
  • Kolekcje
  • Aplety

3
Podstawy obslugi wejscia/wyjscia
  • Mechanizm ten bazuje na standardowym mechanizmie
    obslugi strumieni (stream)
  • Strumien I/O okreslony jest przez zródlo (input
    source) oraz ujscie (output destination)
  • Strumien moze reprezentowac rózne rodzaje zródel
    oraz ujsc np. pliki, urzadzenia, pamiec, inne
    programy, etc
  • Strumienie moga wspierac rózne typy danych bajt,
    obiekty, prymitywne typy danych, etc

4
Strumienie wejsciowe/wyjsciowe
  • Strumien wejsciowy sluzy do czytania porcji
    danych, przychodzacych z innego zródla
  • Strumien wyjsciowy sluzy do zapisu porcji danych,
    które zostana przeslane do ujscia

zródlo http//java.sun.com/docs/books/tutorial/es
sential/io/streams.html
5
Strumienie Bajtowe (byte streams)
  • Strumienie bajtowe wykorzystywane sa do
    przesylania danych w postaci paczek 8 bitów
  • Wszystkie strumienie pochodza od klas
    OutputStream i InputStream
  • Przyklad strumienia do pliku FileInputStream i
    FileOutputStream
  • Przyklad 1(P1) KopowianieBajtow
  • Funkcja read() zwraca wartosc int zamiast Byte,
    poniewaz umozliwa to wykrycie sytuacji konca
    strumienia. Read() zwraca wówczas -1.
  • Kazdy strumien musi zostac zamkniety close().
    Zamkniecie strumienia powinno odbywac sie w
    klauzuli finaly. Pozwala to uchronic przed
    niepotrzebnymi wyciekami.
  • Pozostale typy strumieni bazuja na typie bajtowym
  • Przyklad 1. Czytanie i zapisywanie strumieni.

Strumien wejsciowy
in
in.read()
a
int c
out.write(c)
out
Strumien wyjsciowy
6
Strumienie znaków (character streams)
  • Przechowywanie znaków w konwencji Unicode przez
    JVM. Automatyczna konwersja lokalnych formatów do
    Unicode, nie jest wymagane dodatkowe sprawdzanie
    wyjsciowego formatu przez programiste
  • Nie jest bardziej zlozony niz strumien bajtów
  • Wszystkie strumienie znakowe wyprowadzane sa z
    klas Reader Writer. Np. dla plików FileReader
    FileWriter
  • P2. CopyCharacters. Warto zauwazyc, ze zmienna
    sluzaca do kopiowania jest podobnie jak w P1 typu
    int. Róznica w P1 int bierze 8 bitów, w P2 int
    bierze 16 bitów
  • Strumienie znakowe wykorzystuja sekwencje
  • znak powrotu oraz znak konca linii (\r\n) tzw.
    carriage-return i line-feed
  • lub jedno znakowy znak konca linii (\n) oraz
    powrót (\r)
  • Zastosowanie powyzszych znaków pozwala pisac
    programy na dowolne systemy operacyjne.
  • P3. Program CopyCharacters z uwzglednieniem konca
    linii. Klasy BufferReader PrintWriter. Metody
    readLine println

7
Strumienie buforowane (Buffered Streams)
  • Mala efektywnosc wykorzystania strumieni
    niebuforowanych koniecznosc kazdorazowego
    wolania metody wirte read przez system
    operacyjny (koniecznosc uzyskania dostepu do
    dysku, ograniczenia w wydajnosci sieci, etc)
  • Zwiekszenie efektywnosc po przez wykorzystanie
    tzw. buffered streams na poziomie JVM. Dostep do
    zasobów jest jednorazowy dla stosunkowo duzej
    liczby danych.
  • Dane zapisywane sa w buforze. Jesli bufor staje
    sie pelny wówczas wolane sa funkcje natywne dla
    SO. Jesli bufor czytajacy jest pusty wówczas
    wolane sa funkcje SO i bufor zostaje uzupelniony.
  • Mozliwosc konwersji niebuforowanego strumienia do
    buforowanego
  • Przyklad inputStream new BufferedReader(new
    FileReader("x.txt"))outputStream new
    BufferedWriter(new FileWriter(y.txt"))
  • Klasy do tworzenia strumieni buforowanych
  • BufferedInputStream BufferedOutputStream dla
    typu bajt
  • BufferedReader BufferedWriters dla typu
    character
  • Czyszczenie strumienia flushing

8
Formatowanie
  • Strumienie implementujace formatowanie sa
    instancjami PrintWriter i PrintStream
    (System.out, System.err)
  • Dwa poziomy formatowania
  • print i println formatuja dane wyjsciowe w
    standardowy sposób
  • format duze mozliwosci sparametryzowania
    sposobu formatowania danych wyjsciowych
  • Metoda format zawiera zbiór parametrów
    specyfikujacych sposób wyswietlenia argumentów
    znajdujacych sie w tekscie
  • System.out.format("The square root of d is
    f.n", i, r)
  • Parametry konwertujace
  • Format d formatuje wartosc intger do wartosci
    dziesietnej
  • Format f formatuje wartosc typu float do
    wartosci dziesietnej
  • n - generuje ciag znaków zakonczony specyficznym
    dla danej platformy zakonczeniem linii.
  • Format x formatuje wartosc integer do wartosci
    szesnastkowej
  • Format s traktuje kazda wartosc jako string
  • Format tB formatuje integer jako nazwe miesiaca

Wiecej! http//java.sun.com/javase/6/docs/api/java
/util/Formatter.htmlsyntax
9
Formatowanie zasady
Specyfikator formatu
  • Precyzja jest to matematyczna dokladnosc dla
    zmiennych typu float. Dla s i pozostalych
    ogólnych konwersji jest to maksymalna dlugosc.
    Liczba jest przycinana od prawej strony.
  • Dlugosc jest to minimalna dlugosc ciagu znaków.
    Jesli potrzeba nastepuje uzupelnienie do
    wymaganego minimum od lewej strony.
  • Flaga specyfikuje dodatkowe opcje formatowania.
    Np. - okresla, ze liczba zawsze powinna byc
    wyswietlana ze znakiem, a 0, ze 0 jest znakiem,
    który bedzie powtarzany w przypadku uzupelniania.
    . oznacza format liczby z specyficznym dla
    danej platformy separatorem.
  • Indeks argumentu pozwala na bezposrednie
    wskazanie zmiennej, do której tyczy sie dany
    format.

Flaga
Precyzja
Liczba znaków
Indeks argumentu
Rodzaj konwersji
Znak poczatku formatowania
Przyklad System.out.format("f, 1020.10f n",
Math.PI)
3.141593, 00000003.1415926536
10
I/O dla konsoli
  • Standardowy strumien charakterystyczne dla
    wielu systemów operacyjnych. Dane czytaja z
    klawiatury i wyswietlaja na konsoli. Wspieraja
    równiez I/O na plikach pomiedzy programami.
  • JVM wspiera trzy strumienie
  • Standard Input System.in
  • Standard Output System.out (PrintStream)
  • Standard Error System.err (PrintStream)
  • Strumienie zarzadzane przez JVM sa tworzone
    automatycznie i nie jest wymagane ich otwieranie
  • System.out i System.err sa strumieniami bajtowymi
    natomiast maja cechy strumieni znakowych.
  • System.in, zeby wspierac cechy strumieni znaków
    musi zostac opakowany.
  • InputStreamReader cin new InputStreamReader(Syst
    em.in)

11
Konsola
  • Bardziej zawansowana wersja strumieni. Umozliwia
    m.in. Wprowadzanie hasel.
  • Nie zawsze jest dostepna. Jesli metoda
    System.console() zwróci null wówczas dany SO nie
    wspiera konsoli lub program zostal uruchomiony w
    nieinteraktywnym otoczeniu.
  • Wprowadzanie hasel w bezpieczny sposób
    realizowane przy pomocy metody readPassword.
    Metoda ta gwarantuje
  • Przykrycie wprowadzanego hasla na ekranie
  • Szybkosc usuniecia z pamieci, gdyz metoda zwraca
    tablice znaków, która moze byc od razu nadpisana,
    a nie String
  • Przyklad 3 (P3) (linux)

12
Strumienie danych (data streams)
  • Wspieraja bitowa reprezentacje podstawowych typów
  • Implementuja interfejs DataInput lub DataOutput
  • Przyklad
  • Utworzenie strumienia do zapisu
  • out new DataOutputStream(new BufferedOutputStrea
    m(new FileOutputStream(dataFile)))
  • Zapis do strumienia porcji danych
  • out.writeDouble(tablei)
  • out.writeUTF(table2i) - zapis z uzyciem
    kodowania UTF-8
  • Utworzenie strumienia do czytania
  • in new DataInputStream(new BufferedInputStream(n
    ew FileInputStream(dataFile)))
  • Odczyt porcji danych ze strumienia
  • int libcza in.readInt()
  • String znak in.readUTF()
  • DataStreams wykrywaja koniec pliku i informuja o
    tym fakcie po przez rzucenie wyjatku
    EOFException
  • Do programisty nalezy odpowiednio sekwencyjne
    uzywanie funkcji read i wirte przypisanych
    wybranym formatom

13
Serializacja
  • Proces konwersji instancji obiektu, który posiada
    referencje na inne obiekty do postaci liniowego
    strumienia bitów. Zachowanie stanu obiektu.
  • Po serializacji obiekt moze zostac przeslany
    przez siec (gniazda) i odtworzony po drugiej
    stronie.
  • Serializacja jest mechanizmem standardowo
    uzywanym przez RMI.
  • Programista, który chce poslugiwac sie tym
    mechanizmem musi zaimplementowac interfejs
    Serializable. Wiekszosc klas podstawowych posiada
    zaimplementowany interfejs Serializable.

14
Strumienie obiektów
  • Wspieraja przesylanie obiektów.
  • Klasami implementujacymi strumienie obiektów sa
    ObjectInputStream i ObjectOutputStream. Obiekty
    te implementuja ObjectInput ObjectOutput, które
    dziedzicza po DataInput/Output. Podstawowe metody
    z DataStream zaimplementowane sa w tych klasach.
  • Istotne metody writeObject readObject.
  • Metoda readObject musi pozwolic na konstrukcje
    obiektu, który mógl zawierac wskazania na inne
    obiekty, a te obiekty moga miec referencje na
    inne, etc
  • Metoda writeObject tworzy drzewo obiektów i
    zapisuje do strumienia. Czasami wywolanie tej
    metody moze spowodowac zapis duzej ilosci danych.

15
Strumienie plików
  • Ulatwiaja niezalezna od platformy obsluge plików
    (zmiana nazwy, zmiana atrybutów, kasowanie).
  • Instancja typu File odwoluje sie do nazwy plików.
    Nie warunkuje to istnienia pliku.
  • Utworzenie zmiennej reprezentujacej plik
  • File a new File(plik.txt")
  • Rózne zachowanie metody klasy File w zaleznosci
    od systemu operacyjnego np. AbsolutePath().
  • Tworzenie sciezki charakterystycznej dla danego
    SO (wykorzystanie File.separtor)
  • File b new File(".." File.separator
    przyklad" File.separator plik.txt")
  • Przyklad 4 (P4).
  • Koncepcja Random Access File
  • Przyklady metod klasy File
  • Usuwanie
  • delete natychmiastowe usuniecie pliku
  • deleteOnExit plik jest usuwany w momencie
    zakonczenia dzialania JVM
  • Informacje o pliku
  • Ustawianie atrybutów
  • setLastModified
  • Zmiana nazwy pliku
  • renameTo()
  • Praca z katalogami
  • Mkdir tworzenie katalogów
  • List i ListFiles listuje zawartosc katalogów

16
Kolekcje (Collection)
  • Kolekcja jest to obiekt, który gromadzi i
    przechowuje zbiór innych obiektów porzadkujac je
    w okreslony sposób tworzy strukture danych.
  • Przykladami kolekcji sa Vector, Hashtable,
    tablica (array)
  • Szkielet kolekcji (Collection Framework - CF)
    jest to architektura pozwalajaca na manipulowanie
    oraz reprezentowanie dowolnych zbiorów.
    Przykladem takiego szkieletu kolekcji jest STL w
    C.
  • Elementami Collection Framework sa
  • Interfejsy. Pozwalaja na abstrakcyjne
    manipulowanie przechowywanymi danymi.
  • Implementacje. Konkretne implementacje
    interfejsów. Sa to gotowe do uzycia struktury
    danych.
  • Algorytmy. Sa to metody, które moga byc
    wykonywane na obiektach, które implementuja
    interfejsy collection framework np. szukanie,
    sortowanie.
  • Kolekcje byly uwazane jako malo wydajne podejscie
    do reprezentacji struktur danych.

17
Korzysci ze stosowania kolekcji
  • Redukcja nakladu pracy poswiecanego na tworzenie
    struktur danych i implementacje algorytmów.
    Wykorzystanie standardowych kolekcji pozwala na
    latwiejsza integracje
  • Zwiekszenie szybkosc wykonywania programu oraz
    jego jakosci. Collection Framework posiada
    efektywnie zaimplementowane algorytmy oraz
    struktury danych. Programista moze sie skupic na
    ulepszaniu samego programu.
  • Zmniejsza wysilki potrzebne na poznanie nowych
    API.
  • Brak koniecznosci projektowania nowych API
    zastosowanie wczesniej stworzony przez
    specjalistów standardow.
  • Wielokrotne wykorzystanie kodu.

18
Interfejsy w CF
  • Dwa drzewa kolekcji
  • Set jest specjalizowana kolekcja Collection, a
    SortedSet jest specjalizowana kolekcja Set
  • Wszystkie kolekcje sa generyczne (mozliwosc
    uzycia dowolnego typu)
  • public interface CollectionltEgt...
  • Przy deklarowaniu kolekcji nalezy wskazac typ.
    Gwarantuje to mozliwosc wykrycia bledu na
    poziomie kompilacji
  • Zrozumienie stosowania interfejsów kluczem do
    korzystania z CF

19
Interfejsy CF
  • Collection grupa obiektów nazywanych
    elementami. Obiekty te moga sie duplikowac, moga,
    ale nie musza byc posortowane.
  • Set nie moze zawierac takich samych dwóch
    elementów. Modeluje matematyczna abstrakcje
    zbioru.
  • SortedSet zbiór uwzgledniajacy porzadek.
  • List uporzadkowany zbiór. Moze zawierac dwa
    takie same elementy. Uzytkownik moze decydowac,
    gdzie dany element zostanie wstawiony (na
    podstawie indeksu).
  • Queue kolejka elementów. Moze byc FIFO lub
    LIFO. Elementy moga byc ustawiane z priorytetami.
  • Map pozwala przypisywac kluczom okreslone
    wartosci. Nie moze zawierac duplikujacych sie
    kluczy.
  • SrotedMap Map uwzgledniajacy kolejnosc
    elementów zgodnie z malejacymi/rosnacymi
    wartosciami klucza.

20
Collection
  • Ma zastosowanie w przypadku, gdy jest wymagana
    duza ogólnosc dotyczaca sposobu uporzadkowania
    oraz unikatowosci elementów
  • Posiada konstruktor pozwalajacy na konwersje to
    szczególnej kolekcji.
  • ListltStringgt list new ArrayListltStringgt(c)
  • public interface CollectionltEgt extends
    IterableltEgt
  • // podstawowe operacje
  • int size()
  • boolean isEmpty()
  • boolean contains(Object element)
  • boolean add(E element) //optional
  • boolean remove(Object element)
  • IteratorltEgt iterator()
  • // masowe operacje
  • boolean containsAll(Collectionlt?gt c)
  • boolean addAll(Collectionlt? extends Egt c)
  • boolean removeAll(Collectionlt?gt c)
  • boolean retainAll(Collectionlt?gt c)
  • void clear()
  • // operacje na tablicach
  • Object toArray() ltTgt T toArray(T a)

21
Przechodzenie przez Collection
  • For-each
  • Proste przejscie przez cala kolekcje
  • for (Object o collection) System.out.println(o)
  • Iterators
  • Mozliwosc przechodzenia przez kolekcje i usuwania
    pozadanych elementów
  • Iterator zostaje pobrany po przez wywolanie
    metody kolekcji iterator
  • Umozliwia usuniecie aktualnego elementu w
    przeciwienstwie do for-each

public interface IteratorltEgt boolean
hasNext() E next() void remove()
Interfejs
Polimorficznosc kodu!!!
static void filter(Collectionlt?gt c) for
(Iteratorlt?gt it c.iterator() it.hasNext() )
if (!cond(it.next())) it.remove()

Przyklad
22
Set
  • Zawiera metody odziedziczone z Collection i
    dodaje, te które uniemozliwiaja istnienie dwóch
    takich samych elementów.
  • Specyficzne zachowanie metod equals and hashCode
  • Przykladowe implementacje
  • HashSet przechowuje elementy w tablicy. Bardzo
    wydajne jednak nie gwarantuje kolejnosci
    iteracji.
  • TreeSet przechowuje elementy w drzewie
    czerwono-czarnym. Kolejnosc na podstawie
    wartosci. Wolniejsze niz HashSet.
  • LinkedHashSet zaimplementowany jako tablica z
    lista.
  • Przyklad
  • CollectionltTypegt noDups new HashSetltTypegt(c)
  • public interface SetltEgt extends CollectionltEgt
  • // podstawowe operacje
  • int size()
  • boolean isEmpty()
  • boolean contains(Object element)
  • boolean add(E element)
  • boolean remove(Object element)
  • IteratorltEgt iterator()
  • // operacje zbiorcze
  • boolean containsAll(Collectionlt?gt c)
  • boolean addAll(Collectionlt? extends Egt c)
  • boolean removeAll(Collectionlt?gt c)
  • boolean retainAll(Collectionlt?gt c)
  • void clear()
  • Object toArray()
  • ltTgt T toArray(T a)

23
Podstawowe operacje na Set
  • Uwagi!
  • uzywaj typu Set zamiast konkretnego typu jak np.
    HashSet. Pozwoli to na elastyczniejsze
    programowanie po przez wykorzystanie polimorfizmu

import java.util. public class FindDups
public static void main(String args)
SetltStringgt s new HashSetltStringgt()
for (String a args) if (!s.add(a))
System.out.println("Duplicate
detected " a) System.out.println(s.si
ze() " distinct words " s)
Przyklad
Zródlo Java Sun Tutorial
24
List
  • List uwzglednia nastepujace rodzaje operacji na
    kolekcji
  • dostep do wskazanego elementu (positional access)
  • Szukanie
  • Iteracje
  • Widok zakresu
  • Java dostarcza dwa rodzaje implementacji List
  • ArrayList stosunkowo wydajna
  • LinkedList lepsza wydajnosc przy okreslonych
    warunkach.
  • Porównanie do wektora
  • Dlugosc nazw metod umieszczajacych elementy w
    kolekcji setElement(), a w List set()
  • Ta sama metoda set dla wstawiania elementów na
    okreslonej pozycji
  • Iteracja w List moze odbywac sie w dwóch
    kierunkach
  • public interface ListltEgt extends CollectionltEgt
  • // dostep do danej pozycji
  • E get(int index)
  • E set(int index, E element)
  • boolean add(E element)
  • void add(int index, E element)
  • E remove(int index)
  • boolean addAll(int index,
  • Collectionlt? extends Egt c)
  • int indexOf(Object o)
  • int lastIndexOf(Object o)
  • ListIteratorltEgt listIterator()
  • ListIteratorltEgt listIterator(int index)
  • ListltEgt subList(int from, int to)

25
Podstawowe operacje na List
  • Zaimplementowane algorytmy
  • sort sortuje liste z wykorzystaniem algorytmu
    sortowania przez scalanie.
  • shuffle losowa permutacja elementów
  • reverse odwórcenie kolejnosci elementów w
    liscie
  • rotate rotacja elementów z okreslona
    odlegloscia
  • swap zamiana dwóch elementów miejscami
  • replaceAll zamiana wszystkich wystapien
    okreslonej wartosci przez inna wartosc
  • fill - nadpisanie kazdego elementu posiadajacego
    okreslona wartosc
  • copy utworzenie kopi listy
  • binarySearch przeszukiwanie z algorytmem
    drzewa binarnego
  • indexOfSubList indeks pierwszej pod listy,
    która jest równa danej liscie
  • lastIndexOfSubList zawraca indeks ostatniej
    podlisty, która jest równa danej liscie

public static ltEgt void swap(ListltEgt a, int i, int
j) E tmp a.get(i) a.set(i,
a.get(j)) a.set(j, tmp)
Przyklad
Uwagi! Powyzszy przyklad implementuje metode
zamiany miejscami dwóch wybranych elementów.
public static ltEgt void swap(ListltEgt a, int i, int
j) E tmp a.get(i) a.set(i,
a.get(j)) a.set(j, tmp)
Przyklad
Uwagi! Powyzszy przyklad pokazuje sposób
wykonania iteracji wstecz.
26
Queue
  • Kolejka przechowuje elementy w kolejnosci do
    przetwarzania.
  • Dwa rodzaje kolejek
  • zwraca okreslana wartosc, gdy operacja sie nie
    powiedzie
  • rzuca wyjatkiem, gdy operacja sie nie powiedzie
  • Element na poczatku bedzie elementem usuwanym
    jako pierwszy (LIFO) lub jako ostatni (FIFO)
  • Kolejki moga miec okresla liczbe elementów
    (bounded)
  • Pobieranie i usuwanie elementów
  • poll
  • Remove
  • Pobieranie elementu bez usuwania
  • peek
  • element
  • public interface QueueltEgt extends CollectionltEgt
  • E element()
  • boolean offer(E e)
  • E peek()
  • E poll()
  • E remove()

27
Queue - przyklad
Przyklad pokazujacy sposób implementacji licznika
odliczajacego w dól.
import java.util. public class Countdown
public static void main(String args)
throws InterruptedException int time
Integer.parseInt(args0) QueueltIntegergt
queue new LinkedListltIntegergt() for
(int i time i gt 0 i--)
queue.add(i) while (!queue.isEmpty())
System.out.println(queue.remove())
Thread.sleep(1000)
Przyklad
Zródlo Java Sun Tutorial
28
Map
  • Trzy rodzaje implementacji Map
  • HashMap
  • TreeMap
  • LinkedHashMap
  • Dwa slowniki sa równe jesli dla odpowiednich
    kluczy wartosci ich sa sobie równe.
  • Utworzenie obiektu slownika
  • MapltString, Integergt m new HashMapltString,
    Integergt()
  • Dostepne widoki po przez klucz, po przez
    wartosci i po przez wartosci oraz klucz.
  • Iteracja moze odbywac sie wylaczenie po przez
    widoki
  • for (KeyType key m.keySet()) System.out.println(
    key)
  • for (Map.EntryltKeyType, ValTypegt e
    m.entrySet()) System.out.println(e.getKey() "
    " e.getValue())
  • public interface MapltK,Vgt
  • // podstawowe operacje
  • V put(K key, V value)
  • V get(Object key)
  • V remove(Object key)
  • boolean containsKey(Object key)
  • boolean containsValue(Object value)
  • int size()
  • boolean isEmpty()
  • // operacje zbiorcze
  • void putAll(Maplt? extends K, ? extends Vgt m)
  • void clear()
  • // konwersja
  • public SetltKgt keySet()
  • public CollectionltVgt values()
  • public SetltMap.EntryltK,Vgtgt entrySet()
  • // interfejs dla elemtów entrySet
  • public interface Entry
  • K getKey()

29
Aplety
  • Aplety sa to programy, dla których srodowiskiem
    wykonawczym jest przegladarka
  • Aplet musi byc podklasa java.applet.Applet lub
    wersja java.applet.JApplet, w przypadku uzywania
    kontrolek Swing.
  • Aplet w poczatkach Javy pozwalal na latwa
    dystrybucje programów, bez koniecznosci
    przeprowadzenia procesu instalacji.
  • Aplety wykonywane sa w restrykcyjnym bezpiecznym
    obszarze (sandbox).
  • W prowadzenie Java Web Start zmniejszylo
    znaczenie apletów.
  • Umieszczanie apletów na stronie HTML
  • ltapplet codeAppletWorld.class width"200"
    height"200"gtlt/appletgt
  • Mozliwosc wykonania apletu poza przegladarka
  • appletviewer AppletWorld.html
  • Aplet standardowo uruchamiany i zarzadzany jest
    przez plug-in do przegladarki.

30
Konwersja aplikacji do apletu
  • Aplikacja jest programem tzw. stand-alone, gdzie
    punktem wejscia jest funkcja main.
  • Aplet nie posiada metody main. Posiada kilka
    metod, które sa wolane na róznych etapach
    wykonywania apletu
  • Kroki do przeksztalcenia aplikacji w aplet
  • Utworzenie podklasy java.applet.Applet
  • Nadpisanie metody Init, która inicjalizuje
    wykonanie apletu, podobnie jak main
  • Implementacja metody Init powinna uwzgledniac
    fakt, ze moze byc wolana wielokrotnie.
  • Elementy GUI w Aplecie dodawane sa bezposrednio
    do niego.

31
Cykl zycia apletu
  • Ladowanie apletu
  • Utworzenie instancji podklasy Applet
  • Inicjalizacja apletu
  • Uruchomienie apletu
  • Zatrzymanie apletu
  • Aplet zostaje zatrzymany w przypadku, gdy
    uzytkownik opuszcza strone z apletem. Wówczas
    wolana jest funkcja stop.
  • Przeladowanie apletu
  • Jest wyjscie z apletu i ponowne zaladowanie
    apletu przez przegladarke
  • Przy wyjsciu z apletu wolana jest funkcja stop
    oraz nastepuje zwolnienie zasobów

32
Cykl zycia apletu
  • Funkcje cyklu zycia apletu
  • init inicjalizacja apletu. Powinien zawierac
    kod, który normalnie umieszczany jest w
    konstruktorze, a umieszczane w nim metody powinny
    miec krótki czas wykonywania.
  • start jest wolana w celu uruchomienia apletu w
    przypadku gdy jest ladowany aplet badz kiedy
    uzytkownik powraca na strone. W tej metodzie
    powinny zostac uruchomione watki.
  • stop zatrzymanie wykonywania apletu, w momencie
    gdy uzytkownik opuszcza strone badz zamyka
    przegladarke.
  • destroy zwolnienie zasobów, przygotowanie do
    wylaczenia apletu. Nie ma gwarancji, ze metoda
    zostanie wykonana (!).
  • Nie kazdy aplet wymaga nadpisania wszystkich metod

33
Rysowanie
  • Rysowanie realizowane jest przez metode paint
  • Applet dziedziczy metode paint z AWT z klasy
    Container
  • public void paint(Graphics g)
  • g.drawRect(0, 0,
  • getWidth() - 1,
  • getHeight() - 1)
  • g.drawString(buffer.toString(), 5, 15)

34
Przechwytywanie zdarzen
  • Aplet dziedziczy metody do obslugi zdarzen z
    klasy Container
  • processKeyEvent
  • processMouseEvent
  • processEvent przechwytuje kazdy rodzaj zdarzen
  • Przyklad

35
Komponenty UI
  • Przycisk (javax.swing.JButton)
  • Checkboxes (javax.swing.JCheckBox)
  • Pojedyncza linia tekstu (javax.swing.JTextField)
  • Obszar tekstu (javax.swing.JTextArea)
  • Etykieta (javax.swing.JLabel)
  • Lista (javax.swing.JList)
  • Okno wyskakujace tzw. pop-up (javax.swing.Popup)
  • Scrollbars (javax.swing.JScrollBar)
  • Sliders (javax.swing.JSlider)
  • Plótno przestrzen do rysowania
    (java.awt.Canvas)
  • Menu (javax.swing.JMenu,javax.swing.JMenuBar
    javax.swing.JMenuItem, javax.swing.JCheckBoxMenuIt
    em)
  • Kontenery (javax.swing.JPanel, javax.swing.JWindow
    and its subclasses)
  • Metody do zarzadzania komponentami
  • add
  • remove
  • setLayout

36
Bezpieczenstwo
  • Poziomy bezpieczenstwa dla danego apletu
    implementowane sa niezaleznie przez kazda
    przegladarke
  • Restrykcje nakladane przez aplety
  • Aplet nie moze byc ladowac bibliotek, ani
    definiowac natywnych metod
  • Nie moze standardowo czytac ani zapisywac plików
    na dysku komputera, na którym jest wykonywany
  • Nie moze tworzyc polaczenia poza komputerem, z
    które zostal pobrany
  • Nie moze uruchamiac programu, na komputerze, na
    którym jest zainstalowany
  • Nie moze czytac wlasciwosci systemu operacyjnego
  • Wyglad okna apletu rózni sie od wygladu okna
    aplikacji
  • Kazda przegladarka implementuje Security Manager,
    w którym mozna zmieniac moc ograniczen. W
    przypadku, gdy SM uzna, ze zostaly naruszone
    ograniczenia, rzuci wyjatkiem SecurityException

37
Wyswietlanie informacji w statusie
  • Mozliwosc wyswietlania informacji w pasku statusu
  • showStatus("MyApplet Loading image file "
    file)
  • W pasku stanu nie powinny byc wyswietlane
    krytyczne informacje. Warto natomiast wyswietlic
    informacje na temat statusu ladowanych obrazków,
    zródel, etc

38
Wyswietlanie dokumentów
  • Aplet oferuje mozliwosc wyswietlania
    sformatowanych dokumentów HTML
  • Do wyswietlania dokumentu sluza ponizsze metody
    wykonywane na AppletContext
  • public void showDocument(java.net.URL url)
  • public void showDocument(java.net.URL url, String
    targetWindow)
  • Wartosci dla parametru targetWindow blank,
    windowName, _self, _parent, _top

39
Odtwarzanie dzwieków
  • JApplet oraz AudoClip znajdujace sie w pakiecie
    java.applet umozliwiaja odtwarzanie dzwieków w
    formacie 8 bit, µ-law, 8000 Hz, mono, Sun ".au"
  • Tworzenie muzyki zapisanej w formacie .au
    umozliwia audiotool
  • getAudioClip(URL), getAudioClip(URL, String)
    zwraca obiekt, który implementuje interfejs
    AudioClip
  • play(URL), play(URL, String) odgrywa zasób
    umieszony pod wskazanym linkiem.
  • Interfejs AudioClip definiuje nastepujace metody
  • Loop rozpoczyna ciagle odtwarzanie dzwieku.
  • Play odgrywa dzwiek jednokrotnie
  • Stop zatrzymuje odtwarzanie pliku

Przyklad http//java.sun.com/docs/books/tutorial/
deployment/applet/sound.html
40
Parametry
Write a Comment
User Comments (0)
About PowerShow.com