Obsługa wyjątków
Transcript of Obsługa wyjątków
![Page 1: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/1.jpg)
1
Obsługa wyj ątków
![Page 2: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/2.jpg)
2
Podstawy obsługi wyj ątków
� Problem, który wstrzymuje wykonanie metody lub bloku;
� Przykład dzielenie � 7/0, co oznacza wartość 0 w mianowniku??– Tworzony jest nowy obiekt wyjątku – new– ŚcieŜka wykonywana jest przerywana– Mechanizm obsługi wyjątków � procedura
obsługi wyjątków
![Page 3: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/3.jpg)
3
Wyjątki
W języku Java istnieje bardzo rozbudowana hierarchia (drzewo) predefiniowanych klas wyjątków,których superklas ą jest klasa Throwable , a głównymi gałęziami drzewa są klasy Error i Exception .
Wyjątki pozwalają zachować kontrolę nad przebiegiem wykonania funkcji (metod), a takŜe pojedynczych instrukcji zawartych w funkcjach. Wyjątek jest zdarzeniem, które pojawia się podczas wykonania i rozrywa normalnąkolejność wykonania instrukcji.
- Wyjątki weryfikowalne
- Wyjątki nieweryfikowalne
![Page 4: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/4.jpg)
4
Przykład – zgłoszenie wyj ątku
� if (t == null)– throw new NullPointerException ()
� uchwyt obiektu przekazywany jest do throw;� obsługa wyjątków
![Page 5: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/5.jpg)
5
Wyjątki - throw
� Dla obsługi wyjątków weryfikowalnych wprowadzono cztery słowa kluczowe: throw , throws , try , catch i finally .
� Słowo kluczowe throwthrow słuŜy do jawnego zgłaszania wyjątków nieweryfikowalnych i występuje w instrukcji throw(throw wyra Ŝenie ; typu referencyjnego do klasy Throwable lub jej podklas).
� Zgłoszenie wyjątku w instrukcji throwthrow spowoduje natychmiastowe opuszczenie bloku zawierającego instrukcję throw i znalezienie instrukcji trytry , której fraza catchcatch przechwyci zgłoszony wyjątek.
� JeŜeli nie ma takiej instrukcji try, zostanie wywołana metoda UncaughtException i wykonanie programu (lub wątku) zostanie zakończone.
![Page 6: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/6.jpg)
6
throw - try
� Wyrzucenie wyjątku (poprzez throw) z wnętrza metody powoduje przerwanie wykonywania tej metody – proces zwracania wyjątku
� Zablokowanie wyjścia z metody poprzez zastosowanie w metodzie bloku try
try {….}
![Page 7: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/7.jpg)
7
Przechwycenie wyjatków try … catch…
� JeŜeli wykonanie pewnej instrukcji programu moŜe spowodować powstanie wyjątkowego zdarzenia, to ujmuje sięgo w blok instrukcji try , po którym muszą wystąpić procedury obsługi wyjątku mające postać frazy catch i bezpośrednio po catch (opcjonalnie) frazy finally .
� try {I}� catch(arg1 e1) {I} � catch(arg2 e2) {I} � ... � catch(argn en) {I} � ... � finally {I}
Sterowanie przekazywane jest dopierwszej w kolejno ści klauzulicatch, której „argument" (typwyjątku) pasuje do typupowstałego wyjątku
najpierw podawać BARDZIEJ SZCZEGÓŁOWE TYPY WYJĄTKÓW!!! switch - break
![Page 8: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/8.jpg)
8
� KaŜdy z członów catch (procedura obsługi wyjątków) jest „metodą” pobierającą jeden parametr określonego typu
� Obsługa wyjątku jest dokonywana przez ten człon catch , której odpowiada typ wyrzuconego wyjątku.
� Obsługa dla pierwszej zgodności typu
![Page 9: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/9.jpg)
9
Schemat obsługi wyj ątków
int a, b, c; String s;try {// wyj ątek ArithmeticException
s = Integer.toString(a);}
catch(ArithmeticException ex) {// wyj ątek jest obsługiwany w bloku catch
s = "*" ;}
![Page 10: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/10.jpg)
10
Kończenie, wyznawanie w sytuacjach wyjątku
� Błąd krytyczny, brak moŜliwości powrotu do miejsca, w którym wystąpił wyjątek;
� Wznawianie, moŜliwość naprawiania sytuacji i ponownego wywołania metody (try w while)
![Page 11: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/11.jpg)
11
Fraza:throws klasa_wyj ątków
� public staic void main(String args[]) throwsException {/*...*/}
� void printNumber(int number) throwsWrongNumberException {/*...*/}
![Page 12: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/12.jpg)
12
Tworzenie własnych wyj ątków
� Przygotowanie klasy dziedziczącej po istniejącym typie wyjątku
� class SimpleException extends Exception{}
![Page 13: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/13.jpg)
13
� public class SimpleExceptionDemo {� public void f() throws SimpleException {� System.out.println( "Wyrzucam SimpleException z f()");
� throw new SimpleException ();� }� public static void main (String[] args) {� SimpleExceptionDemo sed = new SimpleExceptionDemo();� try {� sed.f();� } � catch(SimpleException e) {� System.err.println("Złapałem!");� }� }� }
![Page 14: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/14.jpg)
14
Własne wyj ątki
Wyjątki są obiektami klas pochodnych od Throwable.
Aby stworzyć własny wyjątek, naleŜy zdefiniować odpowiednią klasę.
Zgodnie z konwencją dziedziczymy podklasę Throwable - klasęException .
class NaszWyj extends Exception{. . . . . .
void naszaMetoda() throws NaszWyj{
. . . . .if (bł ąd)throw new
NaszWyj(ew_param_konstruktora_z_info_o_bł ędzie);}
}
![Page 15: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/15.jpg)
15
� class MyException extends Exception {� public MyException() {}� public MyException(String msg) {
� super(msg);� }
� }
![Page 16: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/16.jpg)
16
� public class FullConstructors {� public static void f() throws MyException {� System.out.println( "Wyrzucam MyException z f()");� throw new MyException();� }� public static void g() throws MyException {� System.out.println("Wyrzucam MyException z g()");� throw new MyException("Pochodzę z g()");� }� public static void main (String[] args) {� try {� f();� } catch (MyException e) {e.printStackTrace(System.err);}� try {� g();� } catch (MyException e) { e.printStackTrace(System.err); }� }� }
![Page 17: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/17.jpg)
17
printStackTrace
� Metoda klasy Throwable� Wyświetla informacje o wszystkich metodach, które
zostały wywołane, do miejsca, w którym zgłoszono wyjątek
![Page 18: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/18.jpg)
18
Specyfikacja wyj ątków - throws
� Informowanie o wyjątkach jakie mogą zostaćwyrzucone przez metodę
� w przypadku int f() {…} oznacza, Ŝe Ŝadne wyjątki nie są wyrzucane z tej metody – oprócz RunTimeException
� Jeśli metoda powoduje wyjątki to musi je obsłuŜyć, albo zaznaczyć w specyfikacjiwyjątków – kompilacja
![Page 19: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/19.jpg)
19
� public class ExceptionMethods {� public static void main (String[] args) {� try {
� throw new Exception ("Oto mój Wyjątek");
� } catch( Exception e) {� System.err.println("Złapałem wyjątek");
� System.err.println("e.getMessage(): " + e.getMessage());
� System.err.println( "e.getLocalizedMessage(): " +� e.getLocalizedMessage());
� System.err.println("e.toString(): " + e);� System.err.println("e.printStackTrace():");� e.printStackTrace(System.err);� }� }� }
Przechwytywanie dowolnego wyj ątku
![Page 20: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/20.jpg)
20
Standardowe wyj ątki Javy
� Klasa Throwable �
– Error - błędy kompilacji oraz systemu,– Exception – podstawowy typ wyrzucony z
dowolnej metody klasy biblioteki Javy
� Nazwa wyjątku określa problem, jaki wystąpił.
![Page 21: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/21.jpg)
21
RuntimeException – klasa bazowa
� if (t == null)– throw new NullPointerException ()
� Sprawdzenie czy referencja ma wartość nulldokonywane jest przez przy kaŜdym wywołaniu metody – standardowa procedura Javy
� Nie ma potrzeby podawania w specyfikacji, Ŝe metoda moŜe zgłosić wyjątek RuntimeException
![Page 22: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/22.jpg)
22
� Błąd, którego nie moŜna przewidzieć –referencja null z kodu, którego programista nie kontroluje
� ArrayIndexOutOfBoundsException
![Page 23: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/23.jpg)
23
Klauzula finally – wykonywana bez względu czy wyj ątek zgłoszony czy nie
Był wyjątek?
przerwij try uruchomjest klauzulę catch.
wykonaj klauzulęfinally
wykonaj klauzulęfinally
Przejdź do następnejlinii programu
TAK
NIE
boolean metoda(...){
try{
/*instrukcje,które mog ą
spowodować wyj ątek*/}catch (Exception e){
return false ; } finally{
/* uporz ądkowanie, np. zamkni ęcie pliku*/
} return true ;
}
![Page 24: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/24.jpg)
24
� class ThreeException extends Exception {}� public class FinallyWorks {� static int count = 0;
� public static void main(String[] args) {� while(true) {� try {
if(count++ == 0)� throw new ThreeException();� System.out.println("Nie ma wyjątku");� } catch (ThreeException e) {� System.err.println("ThreeException");� } finally {� System.err.println("Jestem w sekcji finally ");� if(count == 2) break; // wyjdź z "while"� }� }� }� }
![Page 25: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/25.jpg)
25
![Page 26: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/26.jpg)
26
try … finally
� class VeryImportantException extends Exception {� public String toString() {� return "Bardzo waŜny wyjątek!";� }� }
� class HoHumException extends Exception {� public String toString() {� return "Trywialny wyjątek ";� }� }
![Page 27: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/27.jpg)
27
� public class LostMessage {� void f() throws VeryImportantException {� throw new VeryImportantException();� }� void dispose() throws HoHumException {� throw new HoHumException();� }
� public static void main(String[] args) � throws Exception {� LostMessage lm = new LostMessage();� try {� lm.f();� } finally {� lm.dispose();� }� }� }
![Page 28: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/28.jpg)
28
Wyjątki a dziedziczenie
� W metodzie przeci ąŜonej moŜna zgłaszaćte wyjątki, które zostały podane w specyfikacji jej wersji z klasy bazowej ;
� Ograniczenia nie stosują się do konstruktorów
� Konstruktor klasy pochodnej nie moŜe przechwytywać wyjątków zgłaszanych przez konstruktor klasy bazowej
![Page 29: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/29.jpg)
29
� abstract class Inning {� Inning() throws BaseballException {}� void event () throws BaseballException {}� abstract void atBat() throws Strike, Foul; � void walk() {}� }
� interface Storm { � void event() throws RainedOut; � void rainHard() throws RainedOut;� }
class BaseballException extends Exception {}class StormException extends Exception {}class RainedOut extends StormException {}
public class StormyInning extends Inning implements Storm {StormyInning() throws RainedOut, BaseballException {}StormyInning(String s) throws Foul, BaseballException {}
// Normalne metody muszą być zgodne z klasą bazową:
![Page 30: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/30.jpg)
30
…
� //! void walk() throws PopFoul {} //Błąd kompilacji
� // Interfejsy (Storm) NIE MOGĄ dodawać wyjątków do� // metod istniejących w klasie bazowej (Inning):
� //! public void event() throws RainedOut {}
� // MoŜna dodać wyjątek, jeśli metoda nie � // istnieje jeszcze w klasie bazowej:
� public void rainHard() throws RainedOut {}
� // MoŜna zdecydować, Ŝe nie będzie zgłaszany Ŝaden
� // wyjątek, nawet jeśli wersja bazowa coś zgłasza – metoda przesłoni ęta:
� public void event() {}
� // Metody przeciąŜone mogą zgłaszać� // przeciąŜone wyjątki:
� void atBat() throws PopFoul {}
![Page 31: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/31.jpg)
31
Standardowe klasy Javy
� java.applet, java.awt, java.beans, java.io, java.lang, java.math, java.net, java.rmi, java.security, java.sql, java.text, java.util, javax.accessibility, javax.swing, org.omg.
![Page 32: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/32.jpg)
32
Pakiety
� java.util.Date data = new java.util.Date();
� import java.util.*;
![Page 33: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/33.jpg)
33
java.lang
� W pakiecie java.lang zdefiniowana jest klasa Object , która jest klasą nadrzędną wobec wszystkich innych klas Javy.
� Boolean, Byte, Integer, Long, Double, Character itd.,
� Klasa Math� Klasa Thread
![Page 34: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/34.jpg)
34
java.lang
� 2 klasy obsługujące łańcuchy znaków: String i StringBuffer .
� Klasa String uŜywana jest do przechowywania i wykonywania operacji na stałych ła ńcuchach ; po utworzeniu obiektu tej klasy nie moŜna zmienićjego wartości.
� Klasa ta zawiera metody:– do sprawdzania poszczególnych znaków, porównywania łańcuchów,
wyodrębniania podłańcuchów, tworzenia kopii z zamianą na małe albo duŜe litery.
� Klasa StringBuffer implementuje łańcuchy znaków, które mogą byćzmieniane . Podstawowe metody tej klasy to append dodająca znaki na końcu bufora i insert wstawiająca znaki w określonym miejscu.
� KaŜdy obiekt przydziela bufor na przechowywany łańcuch znaków. JeŜeli całkowita długość łańcucha wzrośnie powyŜej rozmiaru bufora, automatycznie przydzielany jest większy.
![Page 35: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/35.jpg)
35
Pakiet java.io
� definiuje klasy implementujące operacje wejścia-wyjścia.� Reader wraz z podklasami:
– BufferedReader, – CharArrayReader, – InputStreamReader, – FileReader, – StringReader
� Writer wraz z podklasami:– BufferedWriter, – CharArrayWriter, – OutputStreamWriter, – FileWriter,– PrintWriter, – StringWriter.
![Page 36: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/36.jpg)
36
import java.io.*;import java.util.*;
public class czytam {public static void main (String args[]){
EasyIn easy = new EasyIn();System.out.print("enter float: "); System.out.flush();System.out.println("You entered: " + easy.readFloat() );float a=easy.readFloat();System.out.println("You entered: " + a);}
}
class EasyIn
{static InputStreamReader is = new InputStreamReader( System.in );static BufferedReader br = new BufferedReader( is );StringTokenizer st;StringTokenizer getToken() throws IOException {
String s = br.readLine();return new StringTokenizer(s);
}float readFloat() {
try {st = getToken();return new Float(st.nextToken()).floatValue();
} catch (IOException ioe) {System.err.println("IO Exception in EasyIn.readFloat");return 0.0F;
}}
}
![Page 37: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/37.jpg)
37
pakiet java.util
� szereg klas definiujących róŜne struktury danych przechowujące inne obiekty.
� Klasa Vector implementuje tablicę obiektów, która moŜe rosnąć lub zmniejszać się w miarę jak obiekty są dodawane lub usuwane.
� Wszystkie elementy wektora najwygodniej jest przeglądać wykorzystując interfejs Enumeration
![Page 38: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/38.jpg)
38
� Gdy wektor zajmuje całą przydzieloną pamięć, przed dodaniem kolejnego elementu jego rozmiar jest automatycznie zwiększany o wartość capacityIncrement .
� Program moŜe jednak sam zwiększyć rozmiar wektora przed wstawieniem duŜej porcji danych, aby uniknąć wielu realokacji .
� Podklasą klasy Vector jest Stack realizujący kolejkę LIFO obiektów z metodami push i pop .
![Page 39: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/39.jpg)
39
java.util.zip
� W pakiecie java.util.zip znajdują się klasy pozwalające tworzyć i czytać pliki skompresowane w formatach ZIP i GZIP.
![Page 40: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/40.jpg)
40
Pakiet java.net
� Pakiet java.net zawiera klasy realizujące połączenia sieciowe zarówno na poziomie gniazd, jak i adresów URL wskazujących zasoby w WWW. Podstawowe klasy to:
– Socket, URL, URLConection.
Pakiet java.sql
Jednolity standard dostępu do dowolnych relacyjnych baz danych. Klasy z tego pakietu implementują połączenia z bazą danych, zapytania SQL, wyniki tych zapytań itp.
Driver JDBC (Java DataBase Conectivity)
![Page 41: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/41.jpg)
41
java.rmi
� RMI (Remote Method Invocation ) zawarty w java.rmi umoŜliwia tworzenie rozproszonych aplikacji w Javie.
� RMI zapewnia mechanizm, poprzez który odbywa się komunikacja pomiędzy serwerem i klientem oraz przesyłane są dane w obie strony.
org.omgWspiera powszechnie przyjęty standard modelu rozproszonych obiektów – CORBA (Common Object Request BrokerageArchitecture). Pozwala on na komunikację pomiędzy obiektami bez względu na platformę systemu operacyjnego, ani uŜyty języka programowania.
![Page 42: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/42.jpg)
42
pakiet java.awt
� Aplety i aplikacje Javy komunikują się z uŜytkownikiem wykorzystując klasy z pakietu java.awt składające się na graficzny interfejs uŜytkownika AWT (Abstract WindowToolkit).
� AWT dostarcza typowe komponenty graficzne takie, jak klawisze, pola do wprowadzania tekstu, listy wyboru itd. poprzez klasy:
� Button, � Checkbox, � Choice, � Label, � List, � Menu, � Scrollbar,� TextArea, � TextField będące pochodnymi klasy Component.
� Wykorzystując klasę Canvas , moŜna rysować dowolne obrazy graficzne na ekranie;
� Po dodaniu odpowiedniej obsługi zdarzeń moŜna zdefiniować dowolny własny komponent .
![Page 43: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/43.jpg)
43
model obsługi zdarze ń
� W modelu 1.1 AWT zdarzenia są generowane przez źródła,którymi mogą być komponenty interfejsu uŜytkownika, myszka, klawiatura itd.
� MoŜe być wydelegowany jeden lub więcej odbiorców zdarzenia pochodzącego od określonego źródła, który jest obiektem dowolnej klasy implementującej przynajmniej jeden z interfejsów obsługi zdarzeń takich, jak:
� ActionListener, � KeyListener,� MouseListener.
![Page 44: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/44.jpg)
44
pakiet javax.swing
� W skład JDK 1.2 został włączony pakiet javax.swing nazywany równieŜJava Foundation Classes (JFC), znacznie rozszerzający moŜliwości funkcjonalne interfejsu graficznego uŜytkownika.
� Pakiet ten zawiera znacznie więcej komponentów graficznych , pozwala dynamicznie imitować znane środowiska graficzne (np. Windows, CDE/Motif),
� umoŜliwia korzystanie z urządzeń pomocniczych w odczytywaniu informacji (jak np. czytniki ekranu, wyświetlacze Braille’a),
� zawiera bogatą bibliotekę do tworzenia dwuwymiarowej grafiki , wspomaga technikę “przeci ągnij i upu ść” pomiędzy aplikacjami Javy i aplikacjami w danym systemie operacyjnym.
![Page 45: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/45.jpg)
45
import java.awt.*;import java.awt.event.*;
publicclass HelloApp extends Frame implementsWindowListener{
public HelloApp (){
super ();addWindowListener(this );setSize(320, 200);setVisible(true );
}public void paint(Graphics gDC){
gDC.drawString ("To jest aplikacja", 120, 100);}public static void main(String args[]){
new HelloApp();}
}
public void windowClosing(WindowEvent e){ System.exit(0); }public void windowClosed(WindowEvent e){ }public void windowOpened(WindowEvent e){ }public void windowIconified(WindowEvent e){ }public void windowDeiconified(WindowEvent e){ }public void windowActivated(WindowEvent e){}public void windowDeactivated(WindowEvent e){ }
![Page 46: Obsługa wyjątków](https://reader031.fdocuments.net/reader031/viewer/2022013120/58760e1e1a28ab31648be7d7/html5/thumbnails/46.jpg)
46
import java.awt.*;import java.awt.event.*;
publicclass HelloApp extends Frame implements WindowListener{
public HelloApp (){
super();addWindowListener(this);setSize(320, 200);setTitle("Moja aplikacja w Javie");MenuBar menuBar = new MenuBar();setMenuBar(menuBar);Menu menu = new Menu("Plik");menu.add(new MenuItem("Zamknij"));menuBar.add(menu);setVisible(true);
}public void paint(Graphics gDC){
gDC.drawString ("To jest aplikacja", 120, 100);}public static void main(String args[]){
new HelloApp();}public void windowClosing(WindowEvent e){
System.exit(0);}public void windowClosed(WindowEvent e){}public void windowOpened(WindowEvent e){}public void windowIconified(WindowEvent e){}public void windowDeiconified(WindowEvent e){}public void windowActivated(WindowEvent e){}public void windowDeactivated(WindowEvent e){}
}