Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Pakiety Javy, Java Wykład 6 mgr inż. Michał Misiak.

Podobne prezentacje


Prezentacja na temat: "Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Pakiety Javy, Java Wykład 6 mgr inż. Michał Misiak."— Zapis prezentacji:

1 Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Pakiety Javy, Java Wykład 6 mgr inż. Michał Misiak

2 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Plan wykładu Obsługa wejścia/wyjścia (I/O API) Kolekcje Aplety

3 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Podstawy obsługi wejścia/wyjścia Mechanizm ten bazuje na standardowym mechanizmie obsługi strumieni (stream) Strumień I/O określony jest przez źródło (input source) oraz ujście (output destination) Strumień może reprezentować różne rodzaje źródeł oraz ujść np. pliki, urządzenia, pamięć, inne programy, etc… Strumienie mogą wspierać różne typy danych: bajt, obiekty, prymitywne typy danych, etc…

4 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Strumienie wejściowe/wyjściowe Strumień wejściowy służy do czytania porcji danych, przychodzących z innego źródła Strumień wyjściowy służy do zapisu porcji danych, które zostaną przesłane do ujścia źródło: http://java.sun.com/docs/books/tutorial/essential/io/streams.html

5 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Strumienie Bajtowe (byte streams) Strumienie bajtowe wykorzystywane są do przesyłania danych w postaci paczek 8 bitów Wszystkie strumienie pochodzą od klas: OutputStream i InputStream Przykład strumienia do pliku: FileInputStream i FileOutputStream Przykład 1(P1) „KopowianieBajtow” Funkcja read() zwraca wartość int zamiast Byte, ponieważ umożliwa to wykrycie sytuacji końca strumienia. Read() zwraca wówczas -1. Każdy strumień musi zostać zamknięty close(). Zamknięcie strumienia powinno odbywać się w klauzuli finaly. Pozwala to uchronić przed niepotrzebnymi wyciekami. Pozostałe typy strumieni bazują na typie bajtowym Przykład 1. Czytanie i zapisywanie strumieni. InXannInXa Strumień wejściowy Strumień wyjściowy a int c = in.read() in out out.write(c)

6 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 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 wyjściowego formatu przez programistę Nie jest bardziej złożony niż strumień bajtów Wszystkie strumienie znakowe wyprowadzane są z klas: Reader & Writer. Np. dla plików: FileReader & FileWriter P2. CopyCharacters. Warto zauważyć, że zmienna służąca do kopiowania jest podobnie jak w P1 typu int. Różnica: w P1 int bierze 8 bitów, w P2 int bierze 16 bitów Strumienie znakowe wykorzystują sekwencje:  znak powrotu oraz znak końca linii (\r\n) tzw. carriage-return i line-feed  lub jedno znakowy: znak końca linii (\n) oraz powrót (\r) Zastosowanie powyższych znaków pozwala pisać programy na dowolne systemy operacyjne. P3. Program CopyCharacters z uwzględnieniem końca linii. Klasy BufferReader & PrintWriter. Metody readLine & println

7 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Strumienie buforowane (Buffered Streams) Mała efektywność wykorzystania strumieni niebuforowanych – konieczność każdorazowego wołania metody wirte & read przez system operacyjny (konieczność uzyskania dostępu do dysku, ograniczenia w wydajności sieci, etc…) Zwiększenie efektywność po przez wykorzystanie tzw. buffered streams na poziomie JVM. Dostęp do zasobów jest jednorazowy dla stosunkowo dużej liczby danych. Dane zapisywane są w buforze. Jeśli bufor staje się pełny wówczas wołane są funkcje natywne dla SO. Jeśli bufor czytający jest pusty wówczas wołane są funkcje SO i bufor zostaje uzupełniony. Możliwość konwersji niebuforowanego strumienia do buforowanego:  Przykład: 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 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Formatowanie Strumienie implementujące formatowanie są instancjami PrintWriter i PrintStream ( System.out, System.err ) Dwa poziomy formatowania:  print i println – formatują dane wyjściowe w standardowy sposób  format – duże możliwości sparametryzowania sposobu formatowania danych wyjściowych Metoda format zawiera zbiór parametrów specyfikujących sposób wyświetlenia argumentów znajdujących się w tekście  System.out.format("The square root of %d is %f.%n", i, r); Parametry konwertujące:  Format d – formatuje wartość intger do wartości dziesiętnej  Format f – formatuje wartość typu float do wartości dziesiętnej  n - generuje ciąg znaków zakończony specyficznym dla danej platformy zakończeniem linii.  Format x – formatuje wartość integer do wartości szesnastkowej  Format s – traktuje każdą wartość jako string  Format tB – formatuje integer jako nazwę miesiąca Więcej! http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#syntax

9 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Formatowanie zasady Precyzja – jest to matematyczna dokładność dla zmiennych typu float. Dla s i pozostałych ogólnych konwersji jest to maksymalna długość. Liczba jest przycinana od prawej strony. Długość – jest to minimalna długość ciągu znaków. Jeśli potrzeba następuje uzupełnienie do wymaganego minimum od lewej strony. Flaga – specyfikuje dodatkowe opcje formatowania. Np. + - określa, że liczba zawsze powinna być wyświetlana ze znakiem, a 0, że 0 jest znakiem, który będzie powtarzany w przypadku uzupełniania.. – oznacza format liczby z specyficznym dla danej platformy separatorem. Indeks argumentu – pozwala na bezpośrednie wskazanie zmiennej, do której tyczy się dany format. %1$+020.10f Znak początku formatowania Specyfikator formatu Indeks argumentu Flaga Liczba znaków Precyzja Rodzaj konwersji Przykład: System.out.format("%f, %1$+020.10f %n", Math.PI); 3.141593, +00000003.1415926536

10 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 I/O dla konsoli Standardowy strumień – charakterystyczne dla wielu systemów operacyjnych. Dane czytają z klawiatury i wyświetlają na konsoli. Wspierają również I/O na plikach pomiędzy programami. JVM wspiera trzy strumienie:  Standard Input: System.in  Standard Output: System.out ( PrintStream )  Standard Error: System.err ( PrintStream ) Strumienie zarządzane przez JVM są tworzone automatycznie i nie jest wymagane ich otwieranie System.out i System.err są strumieniami bajtowymi natomiast mają cechy strumieni znakowych. System.in, żeby wspierać cechy strumieni znaków musi zostać opakowany.  InputStreamReader cin = new InputStreamReader(System.in);

11 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Konsola Bardziej zawansowana wersja strumieni. Umożliwia m.in. Wprowadzanie haseł. Nie zawsze jest dostępna. Jeśli metoda System.console() zwróci null wówczas dany SO nie wspiera konsoli lub program został uruchomiony w nieinteraktywnym otoczeniu. Wprowadzanie haseł w bezpieczny sposób realizowane przy pomocy metody readPassword. Metoda ta gwarantuje:  Przykrycie wprowadzanego hasła * na ekranie  Szybkość usunięcia z pamięci, gdyż metoda zwraca tablicę znaków, która może być od razu nadpisana, a nie String Przykład 3 (P3) – (linux)

12 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Strumienie danych (data streams) Wspierają bitową reprezentację podstawowych typów Implementują interfejs DataInput lub DataOutput Przykład:  Utworzenie strumienia do zapisu: out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)));  Zapis do strumienia porcji danych: out.writeDouble(table[i]); out.writeUTF(table2[i]); - zapis z użyciem kodowania UTF-8  Utworzenie strumienia do czytania in = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile)));  Odczyt porcji danych ze strumienia: int libcza in.readInt(); String znak = in.readUTF(); DataStreams wykrywają koniec pliku i informują o tym fakcie po przez rzucenie wyjątku: EOFException Do programisty należy odpowiednio sekwencyjne używanie funkcji read i wirte przypisanych wybranym formatom

13 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Serializacja Proces konwersji instancji obiektu, który posiada referencje na inne obiekty do postaci liniowego strumienia bitów. Zachowanie stanu obiektu. Po serializacji obiekt może zostać przesłany przez sieć (gniazda) i odtworzony po drugiej stronie. Serializacja jest mechanizmem standardowo używanym przez RMI. Programista, który chce posługiwać się tym mechanizmem musi zaimplementować interfejs Serializable. Większość klas podstawowych posiada zaimplementowany interfejs Serializable.

14 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Strumienie obiektów Wspierają przesyłanie obiektów. Klasami implementującymi strumienie obiektów są: ObjectInputStream i ObjectOutputStream. Obiekty te implementują ObjectInput & ObjectOutput, które dziedziczą po DataInput/Output. Podstawowe metody z DataStream zaimplementowane są w tych klasach. Istotne metody writeObject & readObject.  Metoda readObject musi pozwolić na konstrukcję obiektu, który mógł zawierać wskazania na inne obiekty, a te obiekty mogą mieć referencje na inne, etc…  Metoda writeObject tworzy drzewo obiektów i zapisuje do strumienia. Czasami wywołanie tej metody może spowodować zapis dużej ilości danych.

15 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Strumienie plików Ułatwiają niezależną od platformy obsługę plików (zmiana nazwy, zmiana atrybutów, kasowanie). Instancja typu File odwołuje się do nazwy plików. Nie warunkuje to istnienia pliku. Utworzenie zmiennej reprezentującej plik:  File a = new File(„plik.txt"); Różne zachowanie metody klasy File w zależności od systemu operacyjnego np. AbsolutePath(). Tworzenie ścieżki charakterystycznej dla danego SO (wykorzystanie File.separtor)  File b = new File(".." + File.separator + „przyklad" + File.separator + „plik.txt"); Przykład 4 (P4). Koncepcja Random Access File Przykłady metod klasy File  Usuwanie: delete – natychmiastowe usunięcie pliku deleteOnExit – plik jest usuwany w momencie zakończenia działania JVM  Informacje o pliku  Ustawianie atrybutów setLastModified  Zmiana nazwy pliku renameTo()  Praca z katalogami Mkdir – tworzenie katalogów List i ListFiles – listuje zawartość katalogów

16 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Kolekcje (Collection) Kolekcja jest to obiekt, który gromadzi i przechowuje zbiór innych obiektów porządkując je w określony sposób – tworzy strukturę danych. Przykładami kolekcji są: Vector, Hashtable, tablica (array) Szkielet kolekcji (Collection Framework - CF) jest to architektura pozwalająca na manipulowanie oraz reprezentowanie dowolnych zbiorów. Przykładem takiego szkieletu kolekcji jest STL w C++. Elementami Collection Framework są:  Interfejsy. Pozwalają na abstrakcyjne manipulowanie przechowywanymi danymi.  Implementacje. Konkretne implementacje interfejsów. Są to gotowe do użycia struktury danych.  Algorytmy. Są to metody, które mogą być wykonywane na obiektach, które implementują interfejsy collection framework np. szukanie, sortowanie. Kolekcje były uważane jako mało wydajne podejście do reprezentacji struktur danych.

17 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Korzyści ze stosowania kolekcji Redukcja nakładu pracy poświęcanego na tworzenie struktur danych i implementację algorytmów. Wykorzystanie standardowych kolekcji pozwala na łatwiejszą integrację Zwiększenie szybkość wykonywania programu oraz jego jakości. Collection Framework posiada efektywnie zaimplementowane algorytmy oraz struktury danych. Programista może się skupić na ulepszaniu samego programu. Zmniejsza wysiłki potrzebne na poznanie nowych API. Brak konieczności projektowania nowych API – zastosowanie wcześniej stworzony przez specjalistów standardow. Wielokrotne wykorzystanie kodu.

18 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Interfejsy w CF Dwa drzewa kolekcji Set jest specjalizowaną kolekcją Collection, a SortedSet jest specjalizowaną kolekcją Set Wszystkie kolekcje są generyczne (możliwość użycia dowolnego typu)  public interface Collection... Przy deklarowaniu kolekcji należy wskazać typ. Gwarantuje to możliwość wykrycia błędu na poziomie kompilacji Zrozumienie stosowania interfejsów kluczem do korzystania z CF Collection SetListQueue SortedSet Map SortedMap

19 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Interfejsy CF Collection – grupa obiektów nazywanych elementami. Obiekty te mogą się duplikować, mogą, ale nie musza być posortowane. Set – nie może zawierać takich samych dwóch elementów. Modeluje matematyczną abstrakcję zbioru. SortedSet – zbiór uwzględniający porządek. List – uporządkowany zbiór. Może zawierać dwa takie same elementy. Użytkownik może decydować, gdzie dany element zostanie wstawiony (na podstawie indeksu). Queue – kolejka elementów. Może być FIFO lub LIFO. Elementy mogą być ustawiane z priorytetami. Map – pozwala przypisywać kluczom określone wartości. Nie może zawierać duplikujących się kluczy. SrotedMap – Map uwzględniający kolejność elementów zgodnie z malejącymi/rosnącymi wartościami klucza.

20 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Collection Ma zastosowanie w przypadku, gdy jest wymagana duża ogólność dotycząca sposobu uporządkowania oraz unikatowości elementów Posiada konstruktor pozwalający na konwersje to szczególnej kolekcji.  List list = new ArrayList (c) public interface Collection extends Iterable { // podstawowe operacje int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); Iterator iterator(); // masowe operacje boolean containsAll(Collection c); boolean addAll(Collection c); boolean removeAll(Collection c); boolean retainAll(Collection c); void clear(); // operacje na tablicach Object[] toArray(); T[] toArray(T[] a); }

21 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Przechodzenie przez Collection For-each  Proste przejście przez całą kolekcję  for (Object o : collection) System.out.println(o); Iterators  Możliwość przechodzenia przez kolekcję i usuwania pożądanych elementów  Iterator zostaje pobrany po przez wywołanie metody kolekcji iterator  Umożliwia usunięcie aktualnego elementu w przeciwieństwie do for-each public interface Iterator { boolean hasNext(); E next(); void remove(); } static void filter(Collection c) { for (Iterator it = c.iterator(); it.hasNext(); ) if (!cond(it.next())) it.remove(); } Interfejs Przykład Polimorficzność kodu!!!

22 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Set Zawiera metody odziedziczone z Collection i dodaje, te które uniemożliwiają istnienie dwóch takich samych elementów. Specyficzne zachowanie metod equals and hashCode Przykładowe implementacje:  HashSet – przechowuje elementy w tablicy. Bardzo wydajne jednak nie gwarantuje kolejności iteracji.  TreeSet – przechowuje elementy w drzewie czerwono-czarnym. Kolejność na podstawie wartości. Wolniejsze niż HashSet.  LinkedHashSet – zaimplementowany jako tablica z listą. Przykład:  Collection noDups = new HashSet (c); public interface Set extends Collection { // podstawowe operacje int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); boolean remove(Object element); Iterator iterator(); // operacje zbiorcze boolean containsAll(Collection c); boolean addAll(Collection c); boolean removeAll(Collection c); boolean retainAll(Collection c); void clear(); Object[] toArray(); T[] toArray(T[] a); }

23 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Podstawowe operacje na Set import java.util.*; public class FindDups { public static void main(String[] args) { Set s = new HashSet (); for (String a : args) if (!s.add(a)) System.out.println("Duplicate detected: " + a); System.out.println(s.size() + " distinct words: " + s); } Przykład Uwagi! używaj typu Set zamiast konkretnego typu jak np. HashSet. Pozwoli to na elastyczniejsze programowanie po przez wykorzystanie polimorfizmu Źródło: Java Sun Tutorial

24 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 List List uwzględnia następujące rodzaje operacji na kolekcji:  dostęp do wskazanego elementu (positional access)  Szukanie  Iteracje  Widok zakresu Java dostarcza dwa rodzaje implementacji List:  ArrayList – stosunkowo wydajna  LinkedList – lepsza wydajność przy określonych warunkach. Porównanie do wektora:  Długość nazw metod umieszczających elementy w kolekcji: setElement(), a w List set()  Ta sama metoda set dla wstawiania elementów na określonej pozycji Iteracja w List może odbywać się w dwóch kierunkach public interface List extends Collection { // dostęp 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, Collection c); int indexOf(Object o); int lastIndexOf(Object o); ListIterator listIterator(); ListIterator listIterator(int index); List subList(int from, int to); }

25 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Podstawowe operacje na List public static void swap(List a, int i, int j) { E tmp = a.get(i); a.set(i, a.get(j)); a.set(j, tmp); } Przykład Uwagi! Powyższy przykład implementuje metodę zamiany miejscami dwóch wybranych elementów. Zaimplementowane algorytmy: sort – sortuje listę z wykorzystaniem algorytmu sortowania przez scalanie. shuffle – losowa permutacja elementów reverse – odwórcenie kolejności elementów w liście rotate – rotacja elementów z określoną odległością swap – zamiana dwóch elementów miejscami replaceAll – zamiana wszystkich wystąpień określonej wartości przez inna wartość fill - nadpisanie każdego elementu posiadającego określoną wartość copy – utworzenie kopi listy binarySearch – przeszukiwanie z algorytmem drzewa binarnego indexOfSubList – indeks pierwszej pod listy, która jest równa danej liście lastIndexOfSubList – zawraca indeks ostatniej podlisty, która jest równa danej liście public static void swap(List a, int i, int j) { E tmp = a.get(i); a.set(i, a.get(j)); a.set(j, tmp); } Przykład Uwagi! Powyższy przykład pokazuje sposób wykonania iteracji wstecz.

26 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Queue Kolejka przechowuje elementy w kolejności do przetwarzania. Dwa rodzaje kolejek:  zwraca określaną wartość, gdy operacja się nie powiedzie  rzuca wyjątkiem, gdy operacja się nie powiedzie Element na początku będzie elementem usuwanym jako pierwszy (LIFO) lub jako ostatni (FIFO) Kolejki mogą mieć określą liczbę elementów (bounded) Pobieranie i usuwanie elementów  poll  Remove Pobieranie elementu bez usuwania  peek  element public interface Queue extends Collection { E element(); boolean offer(E e); E peek(); E poll(); E remove(); }

27 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Queue - przykład import java.util.*; public class Countdown { public static void main(String[] args) throws InterruptedException { int time = Integer.parseInt(args[0]); Queue queue = new LinkedList (); for (int i = time; i >= 0; i--) queue.add(i); while (!queue.isEmpty()) { System.out.println(queue.remove()); Thread.sleep(1000); } Przykład Przykład pokazujący sposób implementacji licznika odliczającego w dół. Źródło: Java Sun Tutorial

28 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Map Trzy rodzaje implementacji Map:  HashMap  TreeMap  LinkedHashMap Dwa słowniki są równe jeśli dla odpowiednich kluczy wartości ich są sobie równe. Utworzenie obiektu słownika:  Map m = new HashMap (); Dostępne widoki: po przez klucz, po przez wartości i po przez wartości oraz klucz. Iteracja może odbywać się wyłączenie po przez widoki:  for (KeyType key : m.keySet()) System.out.println(key);  for (Map.Entry e : m.entrySet()) System.out.println(e.getKey() + ": " + e.getValue()); public interface Map { // 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(Map m); void clear(); // konwersja public Set keySet(); public Collection values(); public Set > entrySet(); // interfejs dla elemtów entrySet public interface Entry { K getKey(); V getValue(); V setValue(V value); }

29 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Aplety Aplety są to programy, dla których środowiskiem wykonawczym jest przeglądarka Aplet musi być podklasą java.applet.Applet lub wersja java.applet.JApplet, w przypadku używania kontrolek Swing. Aplet w początkach Javy pozwalał na łatwą dystrybucję programów, bez konieczności przeprowadzenia procesu instalacji. Aplety wykonywane są w restrykcyjnym bezpiecznym obszarze (sandbox). W prowadzenie Java Web Start zmniejszyło znaczenie apletów. Umieszczanie apletów na stronie HTML  Możliwość wykonania apletu poza przeglądarką:  appletviewer AppletWorld.html Aplet standardowo uruchamiany i zarządzany jest przez plug-in do przeglądarki.

30 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Konwersja aplikacji do apletu Aplikacja jest programem tzw. stand-alone, gdzie punktem wejścia jest funkcja main. Aplet nie posiada metody main. Posiada kilka metod, które są wołane na różnych etapach wykonywania apletu Kroki do przekształcenia aplikacji w aplet  Utworzenie podklasy java.applet.Applet  Nadpisanie metody Init, która inicjalizuje wykonanie apletu, podobnie jak main  Implementacja metody Init powinna uwzględniać fakt, że może być wołana wielokrotnie.  Elementy GUI w Aplecie dodawane są bezpośrednio do niego.

31 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Cykl życia apletu Ładowanie apletu  Utworzenie instancji podklasy Applet  Inicjalizacja apletu  Uruchomienie apletu Zatrzymanie apletu  Aplet zostaje zatrzymany w przypadku, gdy użytkownik opuszcza stronę z apletem. Wówczas wołana jest funkcja stop. Przeładowanie apletu  Jest wyjście z apletu i ponowne załadowanie apletu przez przeglądarkę  Przy wyjściu z apletu wołana jest funkcja stop oraz następuje zwolnienie zasobów

32 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Cykl życia apletu Funkcje cyklu życia apletu  init – inicjalizacja apletu. Powinien zawierać kod, który normalnie umieszczany jest w konstruktorze, a umieszczane w nim metody powinny mieć krótki czas wykonywania.  start – jest wołana w celu uruchomienia apletu w przypadku gdy jest ładowany aplet bądź kiedy użytkownik powraca na stronę. W tej metodzie powinny zostać uruchomione wątki.  stop – zatrzymanie wykonywania apletu, w momencie gdy użytkownik opuszcza stronę bądź zamyka przeglądarkę.  destroy – zwolnienie zasobów, przygotowanie do wyłączenia apletu. Nie ma gwarancji, że metoda zostanie wykonana (!). Nie każdy aplet wymaga nadpisania wszystkich metod

33 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Rysowanie Rysowanie realizowane jest przez metodę paint Applet dziedziczy metodę paint z AWT z klasy Container public void paint(Graphics g) { g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); g.drawString(buffer.toStr ing(), 5, 15); }

34 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Przechwytywanie zdarzeń Aplet dziedziczy metody do obsługi zdarzeń z klasy Container  processKeyEvent  processMouseEvent  processEvent – przechwytuje każdy rodzaj zdarzeń Przykład

35 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 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 wyskakujące tzw. pop-up (javax.swing.Popup) Scrollbars (javax.swing.JScrollBar) Sliders (javax.swing.JSlider) Płótno – przestrzeń do rysowania (java.awt.Canvas) Menu (javax.swing.JMenu,javax.swing.JMenuBar javax.swing.JMenuItem, javax.swing.JCheckBoxMenuItem) Kontenery (javax.swing.JPanel, javax.swing.JWindow and its subclasses) Metody do zarządzania komponentami:  add  remove  setLayout

36 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Bezpieczeństwo Poziomy bezpieczeństwa dla danego apletu implementowane są niezależnie przez każdą przeglądarkę Restrykcje nakładane przez aplety:  Aplet nie może być ładować bibliotek, ani definiować natywnych metod  Nie może standardowo czytać ani zapisywać plików na dysku komputera, na którym jest wykonywany  Nie może tworzyć połączenia poza komputerem, z które został pobrany  Nie może uruchamiać programu, na komputerze, na którym jest zainstalowany  Nie może czytać właściwości systemu operacyjnego  Wygląd okna apletu różni się od wyglądu okna aplikacji Każda przeglądarka implementuje Security Manager, w którym można zmieniać moc ograniczeń. W przypadku, gdy SM uzna, że zostały naruszone ograniczenia, rzuci wyjątkiem SecurityException

37 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Wyświetlanie informacji w statusie Możliwość wyświetlania informacji w pasku statusu  showStatus("MyApplet: Loading image file " + file); W pasku stanu nie powinny być wyświetlane krytyczne informacje. Warto natomiast wyświetlić informację na temat statusu ładowanych obrazków, źródeł, etc…

38 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Wyświetlanie dokumentów Aplet oferuje możliwość wyświetlania sformatowanych dokumentów HTML Do wyświetlania dokumentu służą poniższe metody wykonywane na AppletContext:  public void showDocument(java.net.URL url)  public void showDocument(java.net.URL url, String targetWindow) Wartości dla parametru targetWindow: blank, windowName, _self, _parent, _top

39 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Odtwarzanie dzwięków JApplet oraz AudoClip znajdujące się w pakiecie java.applet umożliwiają odtwarzanie dźwięków w formacie: 8 bit, µ-law, 8000 Hz, mono, Sun ".au" Tworzenie muzyki zapisanej w formacie.au umożliwia 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 następujące metody:  Loop – rozpoczyna ciągłe odtwarzanie dzwięku.  Play – odgrywa dźwięk jednokrotnie  Stop – zatrzymuje odtwarzanie pliku Przykład: http://java.sun.com/docs/books/tutorial/deployment/applet/sound.html

40 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007 Parametry


Pobierz ppt "Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Pakiety Javy, Java Wykład 6 mgr inż. Michał Misiak."

Podobne prezentacje


Reklamy Google