• Nie Znaleziono Wyników

Pakiety Javy, Java

N/A
N/A
Protected

Academic year: 2021

Share "Pakiety Javy, Java"

Copied!
40
0
0

Pełen tekst

(1)

Uniwersytet Łódzki

Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej

Pakiety Javy, Java

Wykład 6

(2)

Plan wykładu

 Obsługa wejścia/wyjścia (I/O API)

 Kolekcje

 Aplety

(3)

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)

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

(5)

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.

I n X a n n

I n X a

Strumień wejściowy

int c = a

in.read() in

out.write(c)

(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

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)

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)

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

(9)

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$ +0 20 .10 f

Znak początku formatowania

Specyfikator formatu

Indeks argumentu Flaga Liczba znaw Precyzja Rodzaj konwersji

(10)

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)

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)

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)

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)

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)

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)

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)

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)

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

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

Set List Queue

SortedSet

Map

SortedMap

(19)

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)

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<String> list = new ArrayList<String>(c)

public interface Collection<E> extends Iterable<E> {

// podstawowe operacje int size();

boolean isEmpty();

boolean contains(Object element);

boolean add(E element); //optional boolean remove(Object element);

Iterator<E> iterator();

// masowe operacje

boolean containsAll(Collection<?> c);

boolean addAll(Collection<? extends E>

c);

boolean removeAll(Collection<?> c);

boolean retainAll(Collection<?> c);

void clear();

// operacje na tablicach

Object[] toArray(); <T> T[] toArray(T[]

a); }

(21)

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<E> { boolean hasNext();

E next();

void remove();

}

static void filter(Collection<?> c) {

Interfejsd

(22)

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<Type> noDups = new

public interface Set<E> extends Collection<E> {

// podstawowe operacje int size();

boolean isEmpty();

boolean contains(Object element);

boolean add(E element);

boolean remove(Object element);

Iterator<E> iterator();

// operacje zbiorcze

boolean containsAll(Collection<?> c);

boolean addAll(Collection<? extends E>

c);

boolean removeAll(Collection<?> c);

boolean retainAll(Collection<?> c);

void clear();

Object[] toArray();

<T> T[] toArray(T[] a);

(23)

Podstawowe operacje na Set

import java.util.*;

public class FindDups {

public static void main(String[] args) { Set<String> s = new HashSet<String>();

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)

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<E> extends Collection<E> {

// 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<? extends E> c);

int indexOf(Object o);

int lastIndexOf(Object o);

ListIterator<E> listIterator();

ListIterator<E> listIterator(int index);

List<E> subList(int from, int to);

(25)

Podstawowe operacje na List

public static <E> void swap(List<E> 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

public static <E> void swap(List<E> a, int i, int j) {

E tmp = a.get(i);

a.set(i, a.get(j));

a.set(j, tmp);

}

Przykład

(26)

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<E> extends Collection<E> {

E element();

boolean offer(E e);

E peek();

E poll();

E remove();

}

(27)

Queue - przykład

import java.util.*;

public class Countdown {

public static void main(String[] args) throws InterruptedException { int time = Integer.parseInt(args[0]);

Queue<Integer> queue = new LinkedList<Integer>();

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

(28)

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<String, Integer> m = new HashMap<String, Integer>();

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<KeyType, ValType> e : m.entrySet())

System.out.println(e.getKey() + ":

" + e.getValue());

public interface Map<K,V> { // 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<? extends K, ? extends V> m);

void clear();

// konwersja

public Set<K> keySet();

public Collection<V> values();

public Set<Map.Entry<K,V>> entrySet();

// interfejs dla elemtów entrySet public interface Entry {

K getKey();

(29)

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

<applet code=AppletWorld.class width="200" height="200"></applet>

Możliwość wykonania apletu poza przeglądarką:

appletviewer AppletWorld.html

Aplet standardowo uruchamiany i zarządzany jest przez plug-in do przeglądarki.

(30)

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)

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)

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)

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)

Przechwytywanie zdarzeń

 Aplet dziedziczy metody do obsługi zdarzeń z klasy Container

 processKeyEvent

 processMouseEvent

 processEvent – przechwytuje każdy rodzaj zdarzeń

 Przykład

(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 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,

 Metody do zarządzania komponentami:

 add

 remove

 setLayout

(36)

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)

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)

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)

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

(40)

Parametry

Cytaty

Powiązane dokumenty

• typ wyniku zwracanego przez return nie przeciąża nazwy metody.. Jest to możliwe dzięki przesłanianiu metod odleglosc.. Klasa Tablice dziedzicząca po klasie JFrame używa

➤ Soczewka może wytwarzać obraz przedmiotu tylko dlatego, że może ona odchylać promienie świetlne; ale może ona odchylać promienie świetlne tylko wtedy, gdy jej

Jego podstawą było przekonanie, że słowo jest żywe tylko wtedy, gdy jest wymawiane przez obecnego realnie człowieka wobec innych realnie obecnych ludzi, wymawianiu temu

Analiza SWOT uwzględnia elementy na zewnętrz przedsiębiorstwa, takie jak: czynniki ekonomiczne, polityczne, technologiczne, społeczne i etyczne.. Czynniki pozytywne to szanse

Ewangeliczny przebieg wydarzeń Wyjaśnienie, znaczenie słów Człowiek ( gospodarz) -sieje dobre nasienie na swoim polu Gospodarz – Jezus ; dobre nasienie. Dobre ziarno - pszenica

” Akolici zaostrzenia kursu antyaborcyjnego już przegrali, choć być może jeszcze nie zdają sobie z tego sprawy ”?. Czy jestem zwolennikiem aborcji

„Pamiętam, jak przed naszym wyjazdem [do Irvine] dziekan wydziału aktorskiego mówił, że z rozmów z Grotowskim podczas selekcji zrozumiał, iż kiedy Grotowski pracuje z aktorem,

Krowy i gęsi mają łącznie sto głów i nóg, i jest ich łącznie trzy razy więcej niż koni.. Ile koni pasie się