Podstawy obsługi wyjątków

Podobne dokumenty
Programowanie w środowiskach graficznych. Wykład 2.

Programowanie obiektowe

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Obsługa błędów za pomocą wyjątków. Paweł Motofa (140746)

Języki i metody programowania Java INF302W Wykład 3 (część 1)

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Wykład 8: Obsługa Wyjątków

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

Multimedia JAVA. Historia

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Aplikacje w środowisku Java

Aplikacja wielowątkowa prosty komunikator

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Programowanie obiektowe

Podstawy i języki programowania

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Dawid Gierszewski Adam Hanasko

Java SE Laboratorium nr 4. Temat: Obsługa wyjątków i zdarzeń

Dokumentacja do API Javy.

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Podejście obiektowe do budowy systemów rozproszonych

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Bezpieczne uruchamianie apletów wg

Remote Method Invocation 17 listopada 2010

Obsługa wyjątków. Rysunek 2-4 Hierarchia dziedziczenia klas wyjątków

Programowanie obiektowe

Programowanie w języku Java

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Wywoływanie metod zdalnych

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Programowanie obiektowe

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Kurs programowania. Wykład 4. Wojciech Macyna. 23 marca 2016

Strumienie i serializacja

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Wywoływanie metod zdalnych

Wprowadzanie danych z klawiatury. Wyjątki związane z wprowadzaniem danych, przekroczeniem rozmiaru tablicy, dzieleniem przez zero itd.

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie zdarzeniowe

Aplikacja wielow tkowa prosty komunikator

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wykład 2: Podstawy Języka

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Java - interfejs graficzny

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie Obiektowe Ćwiczenie 4

Kontenery i komponenty graficzne

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Grafika i komunikacja człowiek komputer Laboratorium. Część 1: Wstęp do grafiki

Programowanie obiektowe

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

1 Atrybuty i metody klasowe

Wykład 04. Programowanie obiektowe. Maciej Wołoszyn 17 marca Spis treści

Programowanie obiektowe

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

MATERIAŁY POMOCNICZE DO ĆWICZENIA 3 Klasy i obiekty; atrybuty i metody

Aplikacje w środowisku Java

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Programowanie obiektowe

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Przykłady interfejsu TCP i UDP w Javie

Programowanie graficznych interfejsów użytkownika

Strumienie, pliki. Sortowanie. Wyjątki.

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Aplikacje w Javie- wykład 11 Wątki-podstawy

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Tworzenie i wykorzystanie usług

Programowanie rozproszone w języku Java

JAVA I SIECI. MATERIAŁY:

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Systemy Rozproszone - Ćwiczenie 6

Język C++ wykład VIII

Programowanie obiektowe

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Podstawy Języka Java

Podstawy otwartych języków programowania Wyjątki i strumienie I/O

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Programowanie w Internecie. Java

Tworzenie elementów graficznych

Transkrypt:

1 Obsługa wyjątków

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 2

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 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 weryfikowalne - Wyjątki nieweryfikowalne 3

Przykład zgłoszenie wyjątku if (t == null) throw new NullPointerException () uchwyt obiektu przekazywany jest do throw; obsługa wyjątków 4

Wyjątki - throw Dla obsługi wyjątków weryfikowalnych wprowadzono cztery słowa kluczowe: throw, throws, try, catch i finally. Słowo kluczowe throw 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 throw spowoduje natychmiastowe opuszczenie bloku zawierającego instrukcję throw i znalezienie instrukcji try, której fraza catch 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. 5

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 {. 6

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. 7 try {I catch(arg1 e1) {I catch(arg2 e2) {I... catch(argn en) {I... finally {I Sterowanie przekazywane jest do pierwszej w kolejności klauzuli catch, której argument" (typ wyjątku) pasuje do typu powstałego wyjątku najpierw podawać BARDZIEJ SZCZEGÓŁOWE TYPY WYJĄTKÓW!!! switch - break

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 8

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 = "*" ; 9

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) 10

Fraza: throws klasa_wyjątków public staic void main(string args[]) throws Exception {/*...*/ void printnumber(int number) throws WrongNumberException {/*...*/ 11

Tworzenie własnych wyjątków Przygotowanie klasy dziedziczącej po istniejącym typie wyjątku class SimpleException extends Exception { 12

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!"); 13

Własne wyjątki Wyjątki są obiektami klas pochodnych od Throwable. Aby stworzyć własny wyjątek, naleŝy zdefiniować odpowiednią klasę. 14 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);

class MyException extends Exception { public MyException() { public MyException(String msg) { super(msg); 15

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); 16

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 17

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 specyfikacji wyjątków kompilacja 18

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"); Przechwytywa nie dowolnego wyjątku 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); 19

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

RuntimeException klasa bazowa if (t == null) throw new NullPointerException () Sprawdzenie czy referencja ma wartość null dokonywane 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 21

Błąd, którego nie moŝna przewidzieć referencja null z kodu, którego programista nie kontroluje ArrayIndexOutOfBoundsException 22

Klauzula finally wykonywana bez względu czy wyjątek zgłoszony czy nie 23 Był wyjątek? NIE wykonaj klauzulę finally Przejdź do następnej linii programu TAK przerwij try uruchom jest klauzulę catch. wykonaj klauzulę finally boolean metoda(...) { try { /*instrukcje,które mogą spowodować wyjątek*/ catch(exception e) { return false; finally { /* uporządkowanie, np. zamknięcie pliku*/ return true;

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" 24

25

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 "; 26

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(); 27

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 28

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 { 29 // Normalne metody muszą być zgodne z klasą bazową:

//! 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: 30 void atbat() throws PopFoul {

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

Pakiety java.util.date data = new java.util.date(); import java.util.*; 32

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 33

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

Pakiet java.io 35 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.

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); 36 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;

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 37

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

java.util.zip W pakiecie java.util.zip znajdują się klasy pozwalające tworzyć i czytać pliki skompresowane w formatach ZIP i GZIP. 39

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) 40

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.omg Wspiera powszechnie przyjęty standard modelu rozproszonych obiektów CORBA (Common Object Request Brokerage Architecture). Pozwala on na komunikację pomiędzy obiektami bez względu na platformę systemu operacyjnego, ani uŝyty języka programowania. 41

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 Window Toolkit). 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; 42 Po dodaniu odpowiedniej obsługi zdarzeń moŝna zdefiniować dowolny własny komponent.

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

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), 44 zawiera bogatą bibliotekę do tworzenia dwuwymiarowej grafiki, wspomaga technikę przeciągnij i upuść pomiędzy aplikacjami Javy i aplikacjami w danym systemie operacyjnym.

import java.awt.*; import java.awt.event.*; 45 public class HelloApp extends Frame implements WindowListener { 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) {

import java.awt.*; import java.awt.event.*; public class 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){ 46