Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma...

94

Transcript of Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma...

Page 1: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne
Page 2: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Tytuł oryginału: Core Java Volume I – Fundamentals (10th Edition)

Tłumaczenie: Łukasz Piwko

ISBN: 978-83-283-2480-0

Authorized translation from the English language edition, entitled CORE JAVA VOLUME I – FUNDAMENTALS, Tenth Edition; ISBN 0134177304; by Cay S. Horstmann; published by Pearson Education, Inc, publishing as Prentice Hall.Copyright © 2016 Oracle and/or its affiliates. All rights reserved.Portions © Cay S. Horstmann

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education Inc.Polish language edition published by HELION S.A. Copyright © 2016.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkod wynikłe z wykorzystania informacji zawartych w książce.

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)

Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/javp10.zip

Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/javp10Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Printed in Poland.

• Kup książkę• Poleć książkę • Oceń książkę

• Księgarnia internetowa• Lubię to! » Nasza społeczność

Page 3: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Spis tre ci

Wst p ........................................................................................................................................................ 13

Podzi kowania ......................................................................................................................................... 19

1. Wprowadzenie do Javy ........................................................................................................................211.1. Java jako platforma programistyczna ....................................................................... 211.2. S owa klucze bia ej ksi gi Javy ............................................................................... 22

1.2.1. Prostota ....................................................................................................... 231.2.2. Obiektowo ................................................................................................. 231.2.3. Sieciowo ................................................................................................... 241.2.4. Niezawodno .............................................................................................. 241.2.5. Bezpiecze stwo ............................................................................................ 241.2.6. Niezale no od architektury .......................................................................... 251.2.7. Przeno no ................................................................................................. 261.2.8. Interpretacja ................................................................................................. 261.2.9. Wysoka wydajno ........................................................................................ 271.2.10. Wielow tkowo ......................................................................................... 271.2.11. Dynamiczno ............................................................................................ 27

1.3. Aplety Javy i internet .............................................................................................. 281.4. Krótka historia Javy ............................................................................................... 291.5. G ówne nieporozumienia dotycz ce Javy .................................................................. 31

2. rodowisko programistyczne Javy .................................................................................................. 352.1. Instalacja oprogramowania Java Development Kit .................................................... 36

2.1.1. Pobieranie pakietu JDK ................................................................................. 362.1.2. Instalacja pakietu JDK ................................................................................... 382.1.3. Instalacja plików ród owych i dokumentacji .................................................... 40

2.2. U ywanie narz dzi wiersza polece ......................................................................... 412.3. Praca w zintegrowanym rodowisku programistycznym ............................................. 432.4. Uruchamianie aplikacji graficznej ............................................................................ 462.5. Tworzenie i uruchamianie apletów .......................................................................... 48

Poleć książkęKup książkę

Page 4: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

4 Java. Podstawy

3. Podstawowe elementy j zyka Java .................................................................................................. 553.1. Prosty program w Javie .......................................................................................... 563.2. Komentarze .......................................................................................................... 593.3. Typy danych .......................................................................................................... 60

3.3.1. Typy ca kowite .............................................................................................. 603.3.2. Typy zmiennoprzecinkowe .............................................................................. 613.3.3. Typ char ....................................................................................................... 623.3.4. Unicode i typ char ......................................................................................... 633.3.5. Typ boolean .................................................................................................. 64

3.4. Zmienne ............................................................................................................... 653.4.1. Inicjalizacja zmiennych .................................................................................. 663.4.2. Sta e ............................................................................................................ 67

3.5. Operatory ............................................................................................................. 673.5.1. Funkcje i sta e matematyczne ........................................................................ 683.5.2. Konwersja typów numerycznych ...................................................................... 703.5.3. Rzutowanie ................................................................................................... 713.5.4. czenie przypisania z innymi operatorami ...................................................... 723.5.5. Operatory inkrementacji i dekrementacji ......................................................... 723.5.6. Operatory relacyjne i logiczne ......................................................................... 733.5.7. Operatory bitowe ........................................................................................... 733.5.8. Nawiasy i priorytety operatorów ...................................................................... 743.5.9. Typ wyliczeniowy ........................................................................................... 75

3.6. a cuchy .............................................................................................................. 763.6.1. Pod a cuchy ................................................................................................. 763.6.2. Konkatenacja ............................................................................................... 763.6.3. a cuchów nie mo na modyfikowa ................................................................ 773.6.4. Porównywanie a cuchów ............................................................................... 783.6.5. a cuchy puste i a cuchy null ....................................................................... 793.6.6. Wspó rz dne kodowe znaków i jednostki kodowe ............................................. 803.6.7. API String ..................................................................................................... 813.6.8. Dokumentacja API w internecie ...................................................................... 843.6.9. Sk adanie a cuchów ..................................................................................... 85

3.7. Wej cie i wyj cie ................................................................................................... 883.7.1. Odbieranie danych wej ciowych ...................................................................... 883.7.2. Formatowanie danych wyj ciowych ................................................................. 913.7.3. Zapis i odczyt plików ..................................................................................... 95

3.8. Sterowanie wykonywaniem programu ...................................................................... 973.8.1. Zasi g blokowy ............................................................................................. 973.8.2. Instrukcje warunkowe .................................................................................... 983.8.3. P tle .......................................................................................................... 1003.8.4. P tle o okre lonej liczbie powtórze ............................................................. 1043.8.5. Wybór wielokierunkowy — instrukcja switch .................................................. 1083.8.6. Instrukcje przerywaj ce przep yw sterowania ................................................. 110

3.9. Wielkie liczby ...................................................................................................... 1133.10. Tablice ............................................................................................................. 115

3.10.1. P tla typu for each .................................................................................... 1163.10.2. Inicjowanie tablic i tworzenie tablic anonimowych ........................................ 1173.10.3. Kopiowanie tablicy .................................................................................... 1183.10.4. Parametry wiersza polece ........................................................................ 1193.10.5. Sortowanie tablicy ..................................................................................... 1203.10.6. Tablice wielowymiarowe ............................................................................. 1233.10.7. Tablice postrz pione ................................................................................. 126

Poleć książkęKup książkę

Page 5: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Spis tre ci 5

4. Obiekty i klasy ....................................................................................................................................1294.1. Wst p do programowania obiektowego ................................................................. 130

4.1.1. Klasy ......................................................................................................... 1314.1.2. Obiekty ...................................................................................................... 1314.1.3. Identyfikacja klas ........................................................................................ 1324.1.4. Relacje mi dzy klasami ............................................................................... 133

4.2. U ywanie klas predefiniowanych ........................................................................... 1344.2.1. Obiekty i zmienne obiektów .......................................................................... 1354.2.2. Klasa LocalDate ......................................................................................... 1374.2.3. Metody udost pniaj ce i zmieniaj ce warto elementu ................................. 139

4.3. Definiowanie w asnych klas .................................................................................. 1424.3.1. Klasa Employee .......................................................................................... 1434.3.2. U ywanie wielu plików ród owych ................................................................. 1454.3.3. Analiza klasy Employee ............................................................................... 1464.3.4. Pierwsze kroki w tworzeniu konstruktorów ..................................................... 1474.3.5. Parametry jawne i niejawne .......................................................................... 1484.3.6. Korzy ci z hermetyzacji ................................................................................ 1494.3.7. Przywileje klasowe ...................................................................................... 1514.3.8. Metody prywatne ......................................................................................... 1524.3.9. Sta e jako pola klasy ................................................................................... 152

4.4. Pola i metody statyczne ....................................................................................... 1534.4.1. Pola statyczne ............................................................................................ 1534.4.2. Sta e statyczne ........................................................................................... 1544.4.3. Metody statyczne ........................................................................................ 1554.4.4. Metody fabryczne ........................................................................................ 1564.4.5. Metoda main .............................................................................................. 156

4.5. Parametry metod ................................................................................................. 1594.6. Konstruowanie obiektów ...................................................................................... 165

4.6.1. Przeci anie ............................................................................................... 1654.6.2. Domy lna inicjalizacja pól ............................................................................ 1664.6.3. Konstruktor bezargumentowy ....................................................................... 1674.6.4. Jawna inicjalizacja pól ................................................................................. 1674.6.5. Nazywanie parametrów ................................................................................ 1684.6.6. Wywo ywanie innego konstruktora ................................................................ 1694.6.7. Bloki inicjalizuj ce ....................................................................................... 1704.6.8. Niszczenie obiektów i metoda finalize ........................................................... 174

4.7. Pakiety ............................................................................................................... 1744.7.1. Importowanie klas ....................................................................................... 1754.7.2. Importowanie statyczne ............................................................................... 1774.7.3. Dodawanie klasy do pakietu ........................................................................ 1774.7.4. Zasi g pakietów .......................................................................................... 180

4.8. cie ka klas ....................................................................................................... 1814.8.1. Ustawianie cie ki klas ............................................................................... 184

4.9. Komentarze dokumentacyjne ............................................................................... 1844.9.1. Wstawianie komentarzy ............................................................................... 1854.9.2. Komentarze do klas .................................................................................... 1864.9.3. Komentarze do metod ................................................................................. 1864.9.4. Komentarze do pól ...................................................................................... 1874.9.5. Komentarze ogólne ..................................................................................... 1874.9.6. Komentarze do pakietów i ogólne ................................................................. 1884.9.7. Generowanie dokumentacji .......................................................................... 189

4.10. Porady dotycz ce projektowania klas .................................................................. 190

Poleć książkęKup książkę

Page 6: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

6 Java. Podstawy

5. Dziedziczenie ......................................................................................................................................1935.1. Klasy, nadklasy i podklasy ................................................................................... 194

5.1.1. Definiowanie podklas .................................................................................. 1945.1.2. Przes anianie metod .................................................................................... 1955.1.3. Konstruktory podklas .................................................................................. 1975.1.4. Hierarchia dziedziczenia .............................................................................. 2015.1.5. Polimorfizm ................................................................................................ 2015.1.6. Zasady wywo ywania metod ......................................................................... 2035.1.7. Wy czanie dziedziczenia — klasy i metody finalne ........................................ 2055.1.8. Rzutowanie ................................................................................................. 2065.1.9. Klasy abstrakcyjne ...................................................................................... 2095.1.10. Ograniczanie dost pu ................................................................................ 214

5.2. Kosmiczna klasa wszystkich klas — Object ........................................................... 2155.2.1. Metoda equals ........................................................................................... 2155.2.2. Porównywanie a dziedziczenie ...................................................................... 2175.2.3. Metoda hashCode ....................................................................................... 2205.2.4. Metoda toString .......................................................................................... 222

5.3. Generyczne listy tablicowe ................................................................................... 2285.3.1. Dost p do elementów listy tablicowej ........................................................... 2315.3.2. Zgodno pomi dzy typowanymi a surowymi listami tablicowymi ..................... 234

5.4. Opakowania obiektów i automatyczne pakowanie ................................................... 2355.5. Metody ze zmienn liczb parametrów .................................................................. 2385.6. Klasy wyliczeniowe .............................................................................................. 2405.7. Refleksja ............................................................................................................ 242

5.7.1. Klasa Class ................................................................................................ 2425.7.2. Podstawy przechwytywania wyj tków ............................................................. 2445.7.3. Zastosowanie refleksji w analizie funkcjonalno ci klasy ................................. 2465.7.4. Refleksja w analizie obiektów w czasie dzia ania programu ............................. 2515.7.5. Zastosowanie refleksji w generycznym kodzie tablicowym ............................... 2555.7.6. Wywo ywanie dowolnych metod .................................................................... 258

5.8. Porady projektowe dotycz ce dziedziczenia ............................................................ 261

6. Interfejsy, wyra enia lambda i klasy wewn trzne ........................................................................2656.1. Interfejsy ............................................................................................................ 266

6.1.1. Koncepcja interfejsu .................................................................................... 2666.1.2. W asno ci interfejsów .................................................................................. 2726.1.3. Interfejsy a klasy abstrakcyjne ..................................................................... 2736.1.4. Metody statyczne ........................................................................................ 2746.1.5. Metody domy lne ........................................................................................ 2756.1.6. Wybieranie mi dzy metodami domy lnymi ..................................................... 276

6.2. Przyk ady interfejsów ........................................................................................... 2786.2.1. Interfejsy i wywo ania zwrotne ...................................................................... 2786.2.2. Interfejs Comparator ................................................................................... 2816.2.3. Klonowanie obiektów ................................................................................... 282

6.3. Wyra enia lambda ............................................................................................... 2886.3.1. Po co w ogóle s lambdy ............................................................................. 2886.3.2. Sk adnia wyra e lambda ............................................................................ 2896.3.3. Interfejsy funkcyjne ..................................................................................... 2926.3.4. Referencje do metod ................................................................................... 2936.3.5. Referencje do konstruktorów ........................................................................ 2956.3.6. Zakres dost pno ci zmiennych .................................................................... 295

Poleć książkęKup książkę

Page 7: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Spis tre ci 7

6.3.7. Przetwarzanie wyra e lambda ..................................................................... 2986.3.8. Poszerzenie wiadomo ci o komparatorach .................................................... 301

6.4. Klasy wewn trzne ................................................................................................ 3026.4.1. Dost p do stanu obiektu w klasie wewn trznej .............................................. 3036.4.2. Specjalne regu y sk adniowe dotycz ce klas wewn trznych ............................. 3066.4.3. Czy klasy wewn trzne s potrzebne i bezpieczne? .......................................... 3076.4.4. Lokalne klasy wewn trzne ........................................................................... 3106.4.5. Dost p do zmiennych finalnych z metod zewn trznych .................................... 3106.4.6. Anonimowe klasy wewn trzne ...................................................................... 3136.4.7. Statyczne klasy wewn trzne ......................................................................... 316

6.5. Klasy po rednicz ce ............................................................................................ 3196.5.1. Kiedy u ywa klas po rednicz cych .............................................................. 3196.5.2. Tworzenie obiektów po rednicz cych ............................................................ 3206.5.3. W a ciwo ci klas po rednicz cych ................................................................ 324

7. Wyj tki, asercje i dzienniki ..............................................................................................................3277.1. Obs uga b dów .................................................................................................. 328

7.1.1. Klasyfikacja wyj tków .................................................................................. 3297.1.2. Deklarowanie wyj tków kontrolowanych ........................................................ 3317.1.3. Zg aszanie wyj tków .................................................................................... 3337.1.4. Tworzenie klas wyj tków .............................................................................. 334

7.2. Przechwytywanie wyj tków .................................................................................... 3357.2.1. Przechwytywanie wyj tku ............................................................................. 3357.2.2. Przechwytywanie wielu typów wyj tków .......................................................... 3377.2.3. Powtórne generowanie wyj tków i budowanie a cuchów wyj tków .................. 3397.2.4. Klauzula finally ........................................................................................... 3407.2.5. Instrukcja try z zasobami ............................................................................. 3437.2.6. Analiza danych ze ledzenia stosu ................................................................ 345

7.3. Wskazówki dotycz ce stosowania wyj tków ........................................................... 3487.4. Asercje ............................................................................................................... 350

7.4.1. Koncepcja asercji ........................................................................................ 3517.4.2. W czanie i wy czanie asercji ...................................................................... 3527.4.3. Zastosowanie asercji do sprawdzania parametrów ......................................... 3527.4.4. Zastosowanie asercji do dokumentowania za o e ........................................ 353

7.5. Dzienniki ............................................................................................................ 3557.5.1. Podstawy zapisu do dziennika ...................................................................... 3557.5.2. Zaawansowane techniki zapisu do dziennika ................................................. 3567.5.3. Zmiana konfiguracji mened era dzienników ................................................... 3587.5.4. Lokalizacja ................................................................................................. 3597.5.5. Obiekty typu Handler ................................................................................... 3607.5.6. Filtry .......................................................................................................... 3637.5.7. Formatery ................................................................................................... 3647.5.8. Przepis na dziennik ..................................................................................... 364

7.6. Wskazówki dotycz ce debugowania ...................................................................... 372

8. Programowanie generyczne ...........................................................................................................3798.1. Dlaczego programowanie generyczne .................................................................... 380

8.1.1. Zalety parametrów typów ............................................................................. 3808.1.2. Dla kogo programowanie generyczne ............................................................ 381

8.2. Definicja prostej klasy generycznej ........................................................................ 3828.3. Metody generyczne .............................................................................................. 384

Poleć książkęKup książkę

Page 8: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

8 Java. Podstawy

8.4. Ograniczenia zmiennych typowych ......................................................................... 3858.5. Kod generyczny a maszyna wirtualna .................................................................... 387

8.5.1. Wymazywanie typów .................................................................................... 3888.5.2. Translacja wyra e generycznych .................................................................. 3898.5.3. Translacja metod generycznych .................................................................... 3898.5.4. U ywanie starego kodu ................................................................................ 392

8.6. Ograniczenia i braki ............................................................................................. 3938.6.1. Nie mo na podawa typów prostych jako parametrów typowych ...................... 3938.6.2. Sprawdzanie typów w czasie dzia ania programu jest mo liwe

tylko dla typów surowych ..................................................................................... 3938.6.3. Nie mo na tworzy tablic typów generycznych ................................................ 3948.6.4. Ostrze enia dotycz ce zmiennej liczby argumentów ........................................ 3948.6.5. Nie wolno tworzy egzemplarzy zmiennych typowych ....................................... 3958.6.6. Nie mo na utworzy egzemplarza generycznej tablicy ..................................... 3968.6.7. Zmiennych typowych nie mo na u ywa w statycznych kontekstach

klas generycznych .............................................................................................. 3988.6.8. Obiektów klasy generycznej nie mo na generowa ani przechwytywa .............. 3988.6.9. Mo na wy czy sprawdzanie wyj tków kontrolowanych .................................. 3998.6.10. Uwa aj na konflikty, które mog powsta po wymazaniu typów ..................... 401

8.7. Zasady dziedziczenia dla typów generycznych ........................................................ 4028.8. Typy wieloznaczne ............................................................................................... 404

8.8.1. Koncepcja typu wieloznacznego .................................................................... 4048.8.2. Ograniczenia nadtypów typów wieloznacznych ................................................ 4058.8.3. Typy wieloznaczne bez ogranicze ................................................................ 4088.8.4. Chwytanie typu wieloznacznego .................................................................... 408

8.9. Refleksja a typy generyczne ................................................................................. 4118.9.1. Generyczna klasa Class ............................................................................... 4118.9.2. Zastosowanie parametrów Class<T> do dopasowywania typów ....................... 4128.9.3. Informacje o typach generycznych w maszynie wirtualnej ................................ 412

9. Kolekcje ..............................................................................................................................................4199.1. Architektura kolekcji Javy ..................................................................................... 419

9.1.1. Oddzielenie warstwy interfejsów od warstwy klas konkretnych ......................... 4209.1.2. Interfejs Collection ...................................................................................... 4229.1.3. Iteratory ..................................................................................................... 4239.1.4. Generyczne metody u ytkowe ....................................................................... 4259.1.5. Interfejsy w systemie kolekcji Javy ................................................................ 428

9.2. Konkretne klasy kolekcyjne .................................................................................. 4309.2.1. Listy powi zane .......................................................................................... 4319.2.2. Listy tablicowe ............................................................................................ 4409.2.3. Zbiór HashSet ............................................................................................ 4409.2.4. Zbiór TreeSet .............................................................................................. 4449.2.5. Kolejki Queue i Deque ................................................................................. 4489.2.6. Kolejki priorytetowe ..................................................................................... 450

9.3. S owniki ............................................................................................................. 4519.3.1. Podstawowe operacje s ownikowe ................................................................ 4519.3.2. Modyfikowanie wpisów w s owniku ............................................................... 4549.3.3. Widoki s owników ........................................................................................ 4569.3.4. Klasa WeakHashMap .................................................................................. 4579.3.5. Klasy LinkedHashSet i LinkedHashMap ........................................................ 4589.3.6. Klasy EnumSet i EnumMap .......................................................................... 4599.3.7. Klasa IdentityHashMap ............................................................................... 460

Poleć książkęKup książkę

Page 9: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Spis tre ci 9

9.4. Widoki i opakowania ............................................................................................ 4629.4.1. Lekkie obiekty opakowuj ce kolekcje ............................................................ 4629.4.2. Przedzia y ................................................................................................... 4639.4.3. Widoki niemodyfikowalne ............................................................................. 4649.4.4. Widoki synchronizowane .............................................................................. 4659.4.5. Widoki kontrolowane ................................................................................... 4659.4.6. Uwagi dotycz ce operacji opcjonalnych ......................................................... 466

9.5. Algorytmy ............................................................................................................ 4699.5.1. Sortowanie i tasowanie ............................................................................... 4709.5.2. Wyszukiwanie binarne ................................................................................. 4739.5.3. Proste algorytmy ......................................................................................... 4749.5.4. Operacje zbiorowe ....................................................................................... 4769.5.5. Konwersja pomi dzy kolekcjami a tablicami .................................................. 4779.5.6. Pisanie w asnych algorytmów ....................................................................... 478

9.6. Stare kolekcje ..................................................................................................... 4799.6.1. Klasa Hashtable ......................................................................................... 4799.6.2. Wyliczenia .................................................................................................. 4809.6.3. S owniki w asno ci ...................................................................................... 4819.6.4. Stosy ......................................................................................................... 4829.6.5. Zbiory bitów ................................................................................................ 482

10. Grafika .............................................................................................................................................48710.1. Wprowadzenie do pakietu Swing ......................................................................... 48810.2. Tworzenie ramki ................................................................................................ 49210.3. Pozycjonowanie ramki ........................................................................................ 494

10.3.1. W asno ci ramek ...................................................................................... 49610.3.2. Okre lanie rozmiaru ramki ......................................................................... 497

10.4. Wy wietlanie informacji w komponencie .............................................................. 50010.5. Figury 2D .......................................................................................................... 50510.6. Kolory .............................................................................................................. 51310.7. Czcionki ........................................................................................................... 51710.8. Wy wietlanie obrazów ........................................................................................ 525

11. Obs uga zdarze ...............................................................................................................................52911.1. Podstawy obs ugi zdarze .................................................................................. 529

11.1.1. Przyk ad — obs uga klikni cia przycisku ...................................................... 53111.1.2. Zwi z e definiowanie procedur nas uchowych .............................................. 53611.1.3. Przyk ad — zmiana stylu ............................................................................ 53811.1.4. Klasy adaptacyjne ..................................................................................... 542

11.2. Akcje ................................................................................................................ 54611.3. Zdarzenia generowane przez mysz ...................................................................... 55311.4. Hierarchia zdarze w bibliotece AWT ................................................................... 560

11.4.1. Zdarzenia semantyczne i niskiego poziomu ................................................. 561

12. Komponenty Swing interfejsu u ytkownika ..................................................................................56512.1. Swing a wzorzec projektowy Model-View-Controller ............................................... 566

12.1.1. Wzorce projektowe .................................................................................... 56612.1.2. Wzorzec Model-View-Controller ................................................................... 56812.1.3. Analiza MVC przycisków Swing ................................................................... 571

12.2. Wprowadzenie do zarz dzania rozk adem ............................................................ 57212.2.1. Rozk ad brzegowy ...................................................................................... 57412.2.2. Rozk ad siatkowy ...................................................................................... 576

Poleć książkęKup książkę

Page 10: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

10 Java. Podstawy

12.3. Wprowadzanie tekstu ........................................................................................ 58012.3.1. Pola tekstowe ........................................................................................... 58012.3.2. Etykiety komponentów ............................................................................... 58212.3.3. Pola hase ................................................................................................ 58412.3.4. Obszary tekstowe ...................................................................................... 58412.3.5. Panele przewijane ..................................................................................... 585

12.4. Komponenty umo liwiaj ce wybór opcji ............................................................... 58712.4.1. Pola wyboru .............................................................................................. 58712.4.2. Prze czniki .............................................................................................. 59012.4.3. Obramowanie ........................................................................................... 59312.4.4. Listy rozwijalne ......................................................................................... 59712.4.5. Suwaki ..................................................................................................... 600

12.5. Menu ............................................................................................................... 60612.5.1. Tworzenie menu ........................................................................................ 60612.5.2. Ikony w elementach menu ......................................................................... 60912.5.3. Pola wyboru i prze czniki jako elementy menu ............................................ 61012.5.4. Menu podr czne ....................................................................................... 61112.5.5. Mnemoniki i akceleratory ........................................................................... 61212.5.6. Aktywowanie i dezaktywowanie elementów menu ......................................... 61412.5.7. Paski narz dzi .......................................................................................... 61812.5.8. Dymki ...................................................................................................... 620

12.6. Zaawansowane techniki zarz dzania rozk adem ................................................... 62312.6.1. Rozk ad GridBagLayout .............................................................................. 62412.6.2. Rozk ad grupowy ....................................................................................... 63412.6.3. Rezygnacja z zarz dców rozk adu ................................................................ 64312.6.4. Niestandardowi zarz dcy rozk adu .............................................................. 64312.6.5. Kolejka dost pu ........................................................................................ 647

12.7. Okna dialogowe ................................................................................................ 64812.7.1. Okna dialogowe opcji ................................................................................ 64912.7.2. Tworzenie okien dialogowych ..................................................................... 65912.7.3. Wymiana danych ....................................................................................... 66312.7.4. Okna dialogowe wyboru plików ................................................................... 66912.7.5. Okna dialogowe wyboru kolorów ................................................................. 679

12.8. Rozwi zywanie problemów z programami z graficznym interfejsem u ytkownika ...... 68412.8.1. Wskazówki dotycz ce debugowania ............................................................ 68412.8.2. Zaprz ganie robota AWT do pracy ............................................................... 686

13. Przygotowywanie apletów i aplikacji do u ytku ...........................................................................69313.1. Pliki JAR ........................................................................................................... 694

13.1.1. Tworzenie plików JAR ................................................................................ 69413.1.2. Manifest .................................................................................................. 69513.1.3. Wykonywalne pliki JAR ............................................................................... 69613.1.4. Zasoby ..................................................................................................... 69713.1.5. Piecz towanie pakietów ............................................................................. 700

13.2. Zapisywanie preferencji u ytkownika ................................................................... 70113.2.1. S owniki w asno ci .................................................................................... 70113.2.2. API Preferences ........................................................................................ 706

13.3. Modu y adowania us ug ..................................................................................... 71213.4. Aplety ............................................................................................................... 714

13.4.1. Prosty aplet .............................................................................................. 71513.4.2. Znacznik applet i jego atrybuty ................................................................... 718

Poleć książkęKup książkę

Page 11: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Spis tre ci 11

13.4.3. Parametry przekazuj ce informacje do apletów ............................................ 72013.4.4. Dost p do obrazów i plików audio .............................................................. 72513.4.5. rodowisko dzia ania apletu ....................................................................... 72613.4.6. Komunikacja pomi dzy apletami ................................................................ 72713.4.7. Wy wietlanie elementów w przegl darce ..................................................... 72713.4.8. Piaskownica ............................................................................................. 72913.4.9. Podpisywanie kodu ................................................................................... 730

13.5. Java Web Start .................................................................................................. 73213.5.1. Wdra anie aplikacji Java Web Start ............................................................. 73213.5.2. API JNLP .................................................................................................. 735

14. Wspó bie no .................................................................................................................................74514.1. Czym s w tki ................................................................................................... 746

14.1.1. Wykonywanie zada w osobnych w tkach .................................................... 75114.2. Przerywanie w tków ........................................................................................... 75514.3. Stany w tków .................................................................................................... 758

14.3.1. W tki NEW ............................................................................................... 75814.3.2. W tki RUNNABLE ...................................................................................... 75814.3.3. W tki BLOCKED i WAITING ......................................................................... 75914.3.4. Zamykanie w tków .................................................................................... 759

14.4. W asno ci w tków ............................................................................................. 76114.4.1. Priorytety w tków ...................................................................................... 76114.4.2. W tki demony ........................................................................................... 76214.4.3. Procedury obs ugi nieprzechwyconych wyj tków ........................................... 762

14.5. Synchronizacja .................................................................................................. 76414.5.1. Przyk ad sytuacji powoduj cej wy cig .......................................................... 76414.5.2. Wy cigi .................................................................................................... 76814.5.3. Obiekty klasy Lock .................................................................................... 76914.5.4. Warunki ................................................................................................... 77214.5.5. S owo kluczowe synchronized ..................................................................... 77714.5.6. Bloki synchronizowane .............................................................................. 78114.5.7. Monitor .................................................................................................... 78314.5.8. Pola ulotne ............................................................................................... 78314.5.9. Zmienne finalne ........................................................................................ 78514.5.10. Zmienne atomowe .................................................................................. 78514.5.11. Zakleszczenia ......................................................................................... 78714.5.12. Zmienne lokalne w tków ......................................................................... 79014.5.13. Testowanie blokad i odmierzanie czasu .................................................... 79114.5.14. Blokady odczytu-zapisu ............................................................................ 79314.5.15. Dlaczego metody stop i suspend s wycofywane ....................................... 794

14.6. Kolejki blokuj ce ............................................................................................... 79514.7. Kolekcje bezpieczne w tkowo ............................................................................. 802

14.7.1. Szybkie s owniki, zbiory i kolejki ................................................................. 80214.7.2. Atomowe modyfikowanie elementów s owników ........................................... 80414.7.3. Operacje masowe na wspó bie nych s ownikach skrótów .............................. 80614.7.4. Wspó bie ne widoki zbiorów ....................................................................... 80814.7.5. Tablice kopiowane przy zapisie ................................................................... 80814.7.6. Równoleg e algorytmy tablicowe ................................................................. 80814.7.7. Starsze kolekcje bezpieczne w tkowo ......................................................... 809

14.8. Interfejsy Callable i Future .................................................................................. 810

Poleć książkęKup książkę

Page 12: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

12 Java. Podstawy

14.9. Klasa Executors ................................................................................................ 81514.9.1. Pule w tków ............................................................................................. 81514.9.2. Planowanie wykonywania ........................................................................... 82014.9.3. Kontrolowanie grup zada .......................................................................... 82114.9.4. Szkielet rozga zienie-z czenie .................................................................. 82214.9.5. Klasa CompletableFuture ........................................................................... 824

14.10. Synchronizatory ............................................................................................... 82714.10.1. Semafory ............................................................................................... 82714.10.2. Klasa CountDownLatch ........................................................................... 82814.10.3. Bariery ................................................................................................... 82914.10.4. Klasa Exchanger ..................................................................................... 83014.10.5. Kolejki synchroniczne .............................................................................. 830

14.11. W tki a biblioteka Swing .................................................................................. 83014.11.1. Uruchamianie czasoch onnych zada ........................................................ 83114.11.2. Klasa SwingWorker ................................................................................. 83514.11.3. Zasada jednego w tku ............................................................................ 841

A. S owa kluczowe Javy .......................................................................................................................843

Skorowidz .............................................................................................................................................845

Poleć książkęKup książkę

Page 13: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

13Przygotowywanie apletów

i aplikacji do u ytku

W tym rozdziale: 13.1. Pliki JAR

13.2. Zapisywanie preferencji u ytkownika

13.3. Modu y adowania us ug

13.4. Aplety

13.5. Java Web Start

W tej chwili powinni my swobodnie pos ugiwa si wi kszo ci funkcji j zyka Java. Mamyte solidne podstawy programowania interfejsów graficznych. Skoro potrafimy tworzyaplikacje u ytkowe, musimy pozna techniki przygotowywania ich do u ytku na komputerzeu ytkownika. W kwestii tej wybór cz sto pada na aplety (ang. applet), które by y powodemogromnego zainteresowania Jav na pocz tku jej istnienia. Aplet to specjalny rodzaj pro-gramu w Javie, który mo e zosta pobrany przez przegl dark z internetu i uruchomiony.Mia on uwolni u ytkowników od problemów zwi zanych z instalacj oprogramowania,które by oby pobierane na dowolne urz dzenie lub komputer obs uguj cy Jav i pod czonydo internetu.

Aplety nie spe ni y pok adanych w nich oczekiwa z wielu powodów. Dlatego rozdzia tenzaczynamy od technik pakowania aplikacji. Nast pnie przedstawiamy sposoby zapisywaniaprzez aplikacje informacji konfiguracyjnych i preferencji u ytkownika. Dodatkowo opisu-jemy techniki wczytywania wtyczek do aplikacji za pomoc klasy ServiceLoader.

Pó niej podpowiadamy, co trzeba wiedzie na temat apletów, na wypadek gdyby kto mu-sia jeden utworzy albo obs ugiwa . Opisujemy te mechanizm Java Web Start, b d cyalternatywnym rozwi zaniem w zakresie dostarczania aplikacji za pomoc internetu, który podwieloma wzgl dami przypomina aplety, tylko lepiej nadaje si do wdra ania aplikacji dzia aj -cych poza stron internetow .

Poleć książkęKup książkę

Page 14: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

694 Java. Podstawy

13.1. Pliki JARPakowanie aplikacji ma na celu utworzenie jednego pliku do wykorzystania przez u yt-kownika zamiast ca ej struktury katalogów pe nych plików klas. Do tego celu s u podda-wane kompresji ZIP pliki Java Archive (JAR). Mog one zawiera nie tylko pliki klas, alerównie obrazy i pliki d wi kowe.

W Javie dost pny jest te alternatywny algorytm kompresji o nazwie pack200, który zosta zoptymalizowany pod k tem bardziej efektywnego zmniejszania rozmiarów

plików klas w porównaniu do zwyk ego algorytmu ZIP. Wed ug zapewnie firmy Oraclewspó czynnik kompresji plików klas si ga a 90%. Wi cej informacji na ten temat znajdujesi pod adresem http://docs.oracle.com/javase/1.5.0/docs/guide/deployment/deployment-guide/pack200.html.

13.1.1. Tworzenie plików JARDo tworzenia plików JAR s u y narz dzie o nazwie jar (w standardowej instalacji JDKznajduje si w katalogu jdk/bin). Najcz ciej stosowane polecenie tworz ce plik JAR manast puj c sk adni :

jar cvf JARNazwaPliku Plik1 Plik2 . . .

Na przyk ad:jar cvf CalculatorClasses.jar *.class icon.gif

Ogólny format polecenia jar jest nast puj cy:jar opcje Plik1 Plik2 . . .

Tabela 13.1 przedstawia wszystkie opcje narz dzia jar. S one podobne do opcji polecenia tarw systemie Unix.

Tabela 13.1. Opcje narz dzia jar

Opcja Opis

c Tworzy puste archiwum i dodaje do niego pliki. Katalogi s przetwarzane rekurencyjnie.

C Zmienia tymczasowo lokalizacj . Na przyk ad polecenie cvf JARFileName.jar -C classes*.class przechodzi do katalogu classes w celu dodania klas.

e Tworzy punkt startowy w manife cie (zobacz podrozdzia 13.1.3, „Wykonywalne pliki JAR”).

f Okre la plik JAR o danej nazwie jako drugi argument wiersza polece . Je li tego parametrubrakuje, jar wy le wynik do standardowego wyj cia (przy tworzeniu pliku JAR) lub wczytago ze standardowego wej cia (przy rozpakowywaniu lub tabulacji pliku JAR).

i Tworzy plik indeksowy (przyspieszaj cy wyszukiwanie w du ych archiwach).

m Dodaje manifest do pliku JAR. Manifest jest opisem zawarto ci i pochodzenia pliku archiwum.Ka de archiwum ma domy lny manifest, ale mo na utworzy w asny, który uwierzytelniazawarto archiwum.

Poleć książkęKup książkę

Page 15: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 695

Tabela 13.1. Opcje narz dzia jar (ci g dalszy)

Opcja Opis

M Blokuje tworzenie domy lnego pliku manifestu.

t Wy wietla spis tre ci.

u Aktualizuje istniej cy plik JAR.

v Generuje obszerne dane wyj ciowe.

x Wypakowuje pliki. Je li podanych zostanie kilka nazw plików, zostan wypakowane tylko one.W przeciwnym przypadku program wypakuje wszystkie pliki.

0 Wy cza kompresj ZIP.

W plikach JAR mo na pakowa aplikacje, komponenty programów (tak zwane beany, o któ-rych mowa w rozdziale 11. drugiego tomu) i biblioteki kodu. Na przyk ad biblioteka wyko-nawcza JDK jest zawarta w bardzo du ym pliku o nazwie rt.jar.

13.1.2. ManifestPoza klasami, obrazami i innymi plikami ród owymi ka dy plik JAR zawiera plik manifestu,który okre la specjalne w asno ci archiwum.

Wspomniany plik manifestu ma nazw MANIFEST.MF, a jego lokalizacja to specjalny pod-katalog META-INF w pliku JAR. Minimalna zawarto takiego pliku nie jest zbyt interesuj ca:

Manifest-Version: 1.0

Z o one pliki tego typu mog zawiera znacznie wi cej wpisów pogrupowanych w sekcjach.Pierwsza sekcja nosi nazw sekcji g ównej (ang. main section) i ma zastosowanie do ca egopliku JAR. Kolejne sekcje okre laj w asno ci ró nych elementów maj cych nazwy, jak kon-kretne pliki, pakiety czy adresy URL. Ka da z nich musi si zaczyna od s owa Name. Sekcjes rozdzielane pust lini . Na przyk ad:

Manifest-Version: 1.0opis ca ego archiwum

Name: Woozle.classopis jednego pliku

Name: com/mycompany/mypkg/opis pakietu

Aby zmieni zawarto pliku manifestu, nale y dokona niezb dnych zmian i wyda poni szepolecenie:

jar cfm NazwaPlikuJAR NazwaPlikuManifest . . .

Na przyk ad poni sze polecenie tworzy nowy plik JAR z plikiem manifestu:jar cfm MyArchive.jar manifest.mf com/mycompany/mypkg/*.class

Poleć książkęKup książkę

Page 16: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

696 Java. Podstawy

Aby zaktualizowa plik manifestu istniej cego pliku JAR, nale y umie ci w pliku teksto-wym wpisy, które maj by dodane, i wyda nast puj ce polecenie:

jar ufm MyArchive.jar manifest-additions.mf

Wi cej informacji na temat plików JAR i manifestu mo na znale na stronie http://docs.oracle.com/javase/8/docs/technotes/guides/jar.

13.1.3. Wykonywalne pliki JARIstnieje mo liwo okre lenia punktu startowego programu, czyli klasy, od której zaczynasi dzia anie programu, za pomoc opcji e narz dzia jar:

jar cvfe MyProgram.jar com.mycompany.mypkg.MainAppClass pliki do dodania

Klas g ówn programu mo na te okre li w manife cie. W tym celu nale y do niego dodainstrukcj o nast puj cej postaci:

Main-Class: com.mycompany.mypkg.MainAppClass

Nie dodawaj rozszerzenia .class do nazwy klasy g ównej.

Na ko cu ostatniego wiersza w pliku manifestu musi si znajdowa znak nowego wiersza. W przeciwnym przypadku plik zostanie odczytany nieprawid owo. B d pole-

gaj cy na utworzeniu pliku tekstowego zawieraj cego tylko wiersz Main-Class bez znakuko ca wiersza jest cz sto spotykany.

W obu wymienionych przypadkach program mo na uruchomi przy u yciu nast puj cegopolecenia:

java -jar MyProgram.jar

W zale no ci od konfiguracji systemu operacyjnego mo e by mo liwe uruchomienie apli-kacji za pomoc dwukrotnego klikni cia pliku JAR. Poni ej znajduje si opis zachowaniaró nych systemów w takiej sytuacji:

W systemie Windows instalator aplikacji Java tworzy dowi zanie dla plikówo rozszerzeniu .jar, które uruchamia te pliki za pomoc polecenia javaw -jar(polecenie javaw, w przeciwie stwie do java, nie otwiera okna wiersza polece ).

System Solaris rozpoznaje „magiczn liczb ” pliku JAR i uruchamia j za pomocpolecenia java -jar.

System Mac OS X rozpoznaje rozszerzenie .jar i uruchamia programy w Jaview wyniku dwukrotnego klikni cia pliku JAR.

Jednak programy Javy w plikach JAR to nie to samo co aplikacje rodzime. W systemie Win-dows mo na skorzysta z narz dzi innych producentów s u cych do zamieniania plików JARna pliki wykonywalne tego systemu. Plik JAR jest opakowywany w plik o rozszerzeniu .exe,który lokalizuje i uruchamia maszyn wirtualn Javy (JVM) lub informuje u ytkownika, copowinien zrobi , je li JVM nie ma. Istnieje kilka komercyjnych i darmowych narz dzi tego ty-pu, np.: Launch4J (http://launch4j.sourceforge.net) i IzPack (http://izpack.org).

Poleć książkęKup książkę

Page 17: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 697

W komputerach z systemem Mac OS X sytuacja wygl da nieco lepiej. W sk ad rodowiskaprogramistycznego XCode wchodzi narz dzie o nazwie Jar Bundler s u ce do zamienianiaplików JAR na aplikacje Mac.

13.1.4. ZasobyKlasy u ywane zarówno w apletach, jak i aplikacjach cz sto wykorzystuj pliki danych tegosamego typu:

pliki obrazów i zawieraj ce d wi k;

pliki tekstowe zawieraj ce a cuchy komunikatów i etykiety przycisków;

pliki z danymi binarnymi, na przyk ad opisuj cymi rozk ad mapy.

W Javie takie pliki nazywane s zasobami (ang. resources).

W systemie Windows termin „zasób” (ang. resource) ma w sze znaczenie. Zasoby w tym systemie tak e mog by plikami obrazów, etykietami przycisków itd., ale

s zwi zane z plikami wykonywalnymi z dost pem za po rednictwem standardowegointerfejsu programistycznego. Natomiast pliki zasobów Javy s przechowywane osobno,a nie jako cz ci plików klas. Dost p do zasobów i ich interpretacja zale y od programu.

We my na przyk ad klas o nazwie AboutPanel, która wy wietla komunikat widoczny narysunku 13.1.

Rysunek 13.1.Wy wietlaniezasobuz pliku JAR

Wiadomo, e tytu i rok wydania zostan zmienione w kolejnym wydaniu ksi ki. Abyu atwi zmian , ten tekst nale y umie ci w pliku tekstowym, a nie bezpo rednio w kodzieprogramu.

Powstaje jednak pytanie, gdzie umie ci taki plik jak about.txt. Oczywi cie najlepiej by oby,aby znajdowa si on razem z pozosta ymi plikami programu w pliku JAR.

Program aduj cy klasy potrafi znale pliki klas, je li znajduj si gdzie na cie ce klas,w archiwum lub na serwerze sieciowym. Mechanizm zasobów oferuje podobn funkcjonalnodla plików, które nie s klasami. Poni ej znajduje si spis wymaganych czynno ci:

Poleć książkęKup książkę

Page 18: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

698 Java. Podstawy

1. Utwórz obiekt Class klasy, która ma zasób, na przyk ad AboutPanel.class.

2. Je li zasobem jest obraz lub plik audio, wywo aj metod getResource(filename)w celu uzyskania lokalizacji zasobu w postaci adresu URL. Nast pnie odczytajgo za pomoc metody getImage lub getAudioClip.

3. W przypadku innych zasobów ni obrazy i pliki audio dane z pliku nale y wczytywaza pomoc metody getResourceAsStream.

Chodzi o to, aby program aduj cy klasy potrafi znale klas i odszuka zwi zane z nizasoby w tej samej lokalizacji.

Na przyk ad poni szy fragment kodu tworzy ikon z pliku about.gif:URL url = ResourceTest.class.getResource("about.gif");Image img = new ImageIcon(url).getImage();

Powy szy kod mo na odczyta nast puj co: „znajd plik about.gif w tej samej lokalizacji,w której znajduje si klasa ResourceTest”.

Poni sze instrukcje wczytuj plik about.txt:InputStream stream = ResourceTest.class.getResourceAsStream("about.txt");Scanner in = new Scanner(stream, "UTF-8");

Plik zasobu nie musi si znajdowa w tym samym katalogu co klasa — mo e by w jakimpodkatalogu. Mo na zastosowa hierarchiczn nazw zasobu, jak poni sza:

data/text/about.txt

Jest to wzgl dna nazwa zasobu. Jest ona interpretowana wzgl dem pakietu klasy, która adujedany zasób. Nale y pami ta , e zawsze trzeba u ywa separatora /, bez wzgl du na sepa-rator katalogów stosowany w systemie, w którym s przechowywane pliki zasobów. Na przy-k ad w systemie plików systemu Windows separatory / s automatycznie zamieniane na \.

Nazwa zasobu zaczynaj ca si od znaku / jest bezwzgl dn nazw zasobu. Jest ona lokalizo-wana w taki sam sposób jak klasa wewn trz pakietu. Na przyk ad zasób:

/corejava/title.txt

znajduje si w katalogu corejava (który mo e by podkatalogiem cie ki klas wewn trzpliku JAR lub, w przypadku apletów, na serwerze sieciowym).

Jedynym przeznaczeniem funkcji adowania zasobów jest adowanie plików. Nie istniejadne standardowe metody interpretuj ce zawarto pliku zasobów. Ka dy program musi

interpretowa zawarto swoich plików zasobów na swój w asny sposób.

Innym cz sto spotykanym zastosowaniem zasobów jest mi dzynarodowa lokalizacja pro-gramów. W plikach zasobów przechowuje si a cuchy, które zmieniaj si w zale no ciod j zyka, czyli komunikaty i etykiety interfejsu u ytkownika. Dla ka dego j zyka tworzonyjest osobny plik. API internacjonalizacji, które zosta o opisane w rozdziale 5. drugiego tomu,udost pnia standardow metod s u c do organizacji i dost pu do plików lokalizacyjnych.

Poleć książkęKup książkę

Page 19: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 699

Listing 13.1 przedstawia kod programu demonstruj cego adowanie zasobów. Poni sze pole-cenia kompiluj go, tworz plik JAR i uruchamiaj go:

javac resource/ResourceTest.javajar cvfm ResourceTest.jar resource/ResourceTest.mf resource/*.class resource/*.gifresource/*.txt

java -jar ResourceTest.jar

Listing 13.1. resource/ResourceTest.java

package resource;

import java.awt.*;import java.io.*;import java.net.*;import java.util.*;import javax.swing.*;

/** * @version 1.41 2015-06-12 * @author Cay Horstmann */public class ResourceTest{ public static void main(String[] args) { EventQueue.invokeLater(() -> { JFrame frame = new ResourceTestFrame(); frame.setTitle("ResourceTest"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }); }}

/** * Ramka aduj ca zasoby graficzne i tekstowe */class ResourceTestFrame extends JFrame{ private static final int DEFAULT_WIDTH = 300; private static final int DEFAULT_HEIGHT = 300;

public ResourceTestFrame() { setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); URL aboutURL = getClass().getResource("about.gif"); Image img = new ImageIcon(aboutURL).getImage(); setIconImage(img);

JTextArea textArea = new JTextArea(); InputStream stream = getClass().getResourceAsStream("about.txt"); try (Scanner in = new Scanner(stream, "UTF-8")) { while (in.hasNext()) textArea.append(in.nextLine() + "\n");

Poleć książkęKup książkę

Page 20: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

700 Java. Podstawy

} add(textArea); }}

Aby przekona si , e program pobiera pliki zasobów z archiwum JAR, a nie bie cegokatalogu, mo na przenie ten program do innego folderu.

java.lang.Class 1.0

URL getResource(String name) 1.1

InputStream getResourceAsStream(String name) 1.1

Znajduje zasób w tym samym katalogu, w którym jest umieszczona klasa, i zwracaadres URL lub strumie wej ciowy, za pomoc którego mo na ten zasób za adowa .Zwraca warto null, je li zasób nie istnieje, dzi ki czemu nie powoduje wyj tkudla b du wej cia-wyj cia.

13.1.5. Piecz towanie pakietówW rozdziale 4. wspomnieli my o mo liwo ci piecz towania (ang. seal) pakietów Javy w celuuniemo liwienia dodawania do nich kolejnych klas. Mo e by to konieczne w przypadkuu ywania klas, metod i pól o zasi gu pakietowym. Gdyby nie piecz towanie, inne klasymog yby by umieszczane w tym samym pakiecie i dzi ki temu uzyskiwa dost p do elemen-tów pakietowych.

Je li na przyk ad pakiet com.mycompany.util zostanie zapiecz towany, adna klasa spoza tegozapiecz towanego archiwum nie mo e by zdefiniowana za pomoc poni szej instrukcji:

package com.mycompany.util;

W tym celu wszystkie klasy pakietu nale y umie ci w pliku JAR. Domy lnie pakietyw pliku JAR nie s zapiecz towane. Mo na zmieni to domy lne globalne ustawienie, wsta-wiaj c wiersz

Sealed: true

w g ównej sekcji pliku manifestu. Aby zapiecz towa tylko wybrane pakiety, nale y do plikumanifestu w pliku JAR wstawi dodatkowe sekcje:

Name: com/mycompany/util/Sealed: true

Name: com/mycompany/misc/Sealed: false

Aby zapiecz towa pakiet, nale y utworzy plik tekstowy z instrukcjami manifestu. Nast p-nie nale y uruchomi narz dzie jar w zwyk y sposób:

jar cvfm MyArchive.jar manifest.mf pliki do dodania

Poleć książkęKup książkę

Page 21: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 701

13.2. Zapisywanie preferencji u ytkownikaU ytkownicy oczekuj , e wszystkie dokonane przez nich ustawienia zostan zapisane i zasto-sowane przy ponownym uruchamianiu aplikacji. Najpierw zajmiemy si prost technik opartna zapisywaniu informacji konfiguracyjnych w plikach w asno ci, które by y kiedy stoso-wane w Javie. Nast pnie przejdziemy do opisu niezwykle funkcjonalnego API zarz dzania pre-ferencjami.

13.2.1. S owniki w asno ciS owniki w asno ci (ang. property map) to struktury danych przechowuj ce pary klucz – war-to , które cz sto znajduj zastosowanie jako przechowalnie danych konfiguracyjnych apli-kacji. Ka dy taki s ownik ma trzy cechy:

Klucze i warto ci s a cuchami.

Mo na j atwo zapisa w pliku i za adowa z niego.

Istnieje druga tabela przechowuj ca warto ci domy lne.

Klasa odpowiedzialna za implementacj s owników w asno ci nosi nazw Properties.

Jak wiadomo, s owniki w asno ci znajduj zastosowanie w okre laniu opcji konfiguracyjnychprogramów. Na przyk ad:

Properties settings = new Properties();settings.put("width", "200");settings.put("title", "Witaj, wiecie!");

Do zapisania takiej listy w asno ci w pliku nale y u y metody store. My zapiszemy naszs ownik w pliku o nazwie program.properties. Drugi argument metody store to komentarz,który jest dodawany do pliku.

FileOutputStream out = new FileOutputStream("program.properties");settings.store(out, "Ustawienia programu");

W pliku zostan zapisane nast puj ce dane:#Ustawienia programu#Mon Apr 30 07:22:52 2007width=200title=Witaj, wiecie!

Do adowania plików ustawie s u nast puj ce instrukcje:FileInputStream in = new FileInputStream("program.properties");settings.load(in);

Istnieje zwyczaj przechowywania ustawie programu w podkatalogu g ównego kataloguu ytkownika. Nazwa tego katalogu zazwyczaj zaczyna si od kropki — w systemie Unixkonwencja taka oznacza, e katalog jest katalogiem systemowym ukrytym przed u ytkowni-kiem. W naszym przyk adowym programie stosujemy si do tej konwencji.

Poleć książkęKup książkę

Page 22: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

702 Java. Podstawy

Do sprawdzenia katalogu g ównego u ytkownika mo na wykorzysta metod System.getProperties, która — tak si sk ada — wykorzystuje obiekt typu Properties do zapisu danych

systemowych. Katalog g ówny ma klucz user.home. Istnieje tak e metoda pozwalaj ca odczy-ta pojedynczy klucz:

String userDir = System.getProperty("user.home");

Dobrze jest na wszelki wypadek dostarczy zestaw ustawie domy lnych dla programu.Klasa Properties dysponuje dwoma mechanizmami pozwalaj cymi okre li ustawieniadomy lne. Po pierwsze, mo na utworzy a cuch, który b dzie stosowany domy lnie zaka dym razem, kiedy dany klucz nie zostanie znaleziony.

String title = settings.getProperty("title", "Domy lny tytu ");

Je li w s owniku w asno ci znajduje si w asno title, parametr title zostanie ustawionyna jej a cuch. W przeciwnym przypadku parametr ten przyjmie warto Domy lny tytu .

Po drugie, je li wpisywanie warto ci domy lnej w ka dym wywo aniu metody getPropertyoka e si zbyt mudne, wszystkie ustawienia domy lne mo na umie ci w drugorz dnyms owniku w asno ci dostarczanym nast pnie w konstruktorze s ownika g ównego.

Properties defaultSettings = new Properties();defaultSettings.put("width", "300");defaultSettings.put("height", "200");defaultSettings.put("title", "Domy lny tytu ");. . .Properties settings = new Properties(defaultSettings);

Mo na nawet dostarczy domy lne ustawienia dla ustawie domy lnych. Wystarczy tylkoutworzy kolejny s ownik w asno ci i przekaza go do konstruktora defaultSettings. Niejest to jednak cz sto spotykane rozwi zanie.

Listing 13.2 przedstawia program zapisuj cy i aduj cy ustawienia programu. Zapami tywanes po o enie, rozmiar i tytu ramki. Wygl d programu mo na dostosowa wed ug w asnegouznania, edytuj c plik o nazwie .corejava/program.properties znajduj cy si w katalogug ównym.

Listing 13.2. properties/PropertiesTest.java

package properties;

import java.awt.EventQueue;import java.awt.event.*;import java.io.*;import java.util.Properties;

import javax.swing.*;

/** * Program testuj cy mechanizm w asno ci. Ten program zapami tuje po o enie, rozmiar i tytu ramki. * @version 1.01 2015-06-16 * @author Cay Horstmann */public class PropertiesTest{

Poleć książkęKup książkę

Page 23: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 703

public static void main(String[] args) { EventQueue.invokeLater(() -> { PropertiesFrame frame = new PropertiesFrame(); frame.setVisible(true); }); }}

/** * Ramka pobieraj ca dane dotycz ce po o enia i rozmiaru z pliku w asno ci oraz aktualizuj ca ten plik * w momencie zamykania programu */class PropertiesFrame extends JFrame{ private static final int DEFAULT_WIDTH = 300; private static final int DEFAULT_HEIGHT = 200;

private File propertiesFile; private Properties settings;

public PropertiesFrame() { // Pobranie informacji o po o eniu, rozmiarze i tytule z pliku w asno ci

String userDir = System.getProperty("user.home"); File propertiesDir = new File(userDir, ".corejava"); if (!propertiesDir.exists()) propertiesDir.mkdir(); propertiesFile = new File(propertiesDir, "program.properties");

Properties defaultSettings = new Properties(); defaultSettings.put("left", "0"); defaultSettings.put("top", "0"); defaultSettings.put("width", "" + DEFAULT_WIDTH); defaultSettings.put("height", "" + DEFAULT_HEIGHT); defaultSettings.put("title", "");

settings = new Properties(defaultSettings);

if (propertiesFile.exists()) try (InputStream in = new FileInputStream(propertiesFile)) { settings.load(in); } catch (IOException ex) { ex.printStackTrace(); }

int left = Integer.parseInt(settings.getProperty("left")); int top = Integer.parseInt(settings.getProperty("top")); int width = Integer.parseInt(settings.getProperty("width")); int height = Integer.parseInt(settings.getProperty("height")); setBounds(left, top, width, height);

// Je li nie ma tytu u, u ytkownik zostanie poproszony o jego podanie

String title = settings.getProperty("title");

Poleć książkęKup książkę

Page 24: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

704 Java. Podstawy

if (title.equals("")) title = JOptionPane.showInputDialog("Wpisz tytu ramki:"); if (title == null) title = ""; setTitle(title);

addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { settings.put("left", "" + getX()); settings.put("top", "" + getY()); settings.put("width", "" + getWidth()); settings.put("height", "" + getHeight()); settings.put("title", getTitle());

try (OutputStream out = new FileOutputStream(propertiesFile)) { settings.store(out, "Program Properties"); } catch (IOException ex) { ex.printStackTrace(); } System.exit(0); } }); }}

Klasa Properties ze wzgl dów historycznych implementuje interfejs Map<Object, Object>, a wi c mo na u ywa metod get i put interfejsu Map. Metoda get

zwraca obiekt typu Object, a metoda put pozwala na wstawienie do struktury dowolnegoobiektu. Najlepiej ca y czas pos ugiwa si metodami getProperty i setProperty, któredzia aj na a cuchach, a nie obiektach.

Obiekty typu Properties s zwyk ymi tablicami pozbawionymi struktury hierarchicznej. Programi ci cz sto tworz namiastk hierarchii, odpowiednio nazywaj c klucze, np.

window.main.color, window.main.title itd. Jednak klasa Properties nie zawiera ad-nych metod wspomagaj cych organizacj takich hierarchii. Do przechowywania skompli-kowanych informacji konfiguracyjnych lepiej u ywa klasy Preferences, która zosta aopisana w kolejnym podrozdziale.

java.util.Properties 1.0

Properties()

Tworzy pusty s ownik w asno ci.

Properties(Properties defaults)

Tworzy s ownik w asno ci z zestawem ustawie domy lnych.

Parametr: defaults Warto ci domy lne

Poleć książkęKup książkę

Page 25: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 705

String getProperty(String key)

Pobiera s ownik w asno ci. Zwraca a cuch skojarzony z kluczem key lub a cuchskojarzony z kluczem key w s owniku domy lnym, je li nie ma go w aktualnyms owniku, albo warto null, je li nie zostanie on znaleziony tak e w tym drugims owniku.

Parametr: key Klucz, którego warto ma zosta pobrana.

String getProperty(String key, String defaultValue)

Pobiera w asno z domy ln warto ci , je li klucz key nie zostanie znaleziony.Zwraca a cuch skojarzony z kluczem key lub a cuch domy lny, je li nie ma gow tablicy.

Parametry: key Klucz, którego warto ma zosta pobrana.

defaultValue Warto zwracana, je li dany klucz nie istnieje.

Object setProperty(String key, String value)

Parametry: key Klucz, z którym jest zwi zany a cuchdo ustawienia.

value Warto , która ma zosta skojarzona z kluczem.

void load(InputStream in) throws IOException

aduje s ownik w asno ci ze strumienia wej ciowego.

Parametr: in Strumie wej ciowy

void store(OutputStream out, String header) 1.2

Zapisuje s ownik w asno ci w strumieniu wyj ciowym.

Parametry: out Strumie wyj ciowy

header Nag ówek umieszczany w pierwszym wierszuzapisywanego pliku

java.lang.System 1.0

Properties getProperties()

Pobiera wszystkie w a ciwo ci systemowe. Je li aplikacja nie ma uprawniedo pobierania wszystkich w a ciwo ci systemowych, generowany jest wyj tekzabezpiecze .

String getProperty(String key)

Pobiera w a ciwo systemow opatrzon podanym kluczem. Je li aplikacjanie ma uprawnie do pobierania tej w a ciwo ci systemowej, generowanyjest wyj tek zabezpiecze . Poni sze w a ciwo ci mo na zawsze pobiera :

java.versionjava.vendorjava.vendor.urljava.class.versionos.name

Poleć książkęKup książkę

Page 26: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

706 Java. Podstawy

os.versionos.archfile.separatorpath.separatorline.separatorjava.specification.versionjava.vm.specification.versionjava.vm.specification.vendorjava.vm.specification.namejava.vm.versionjava.vm.vendorjava.vm.name

Nazwy wolno dost pnych w a ciwo ci systemowych mo na znale w pliku security/ java.policy znajduj cym si w katalogu rodowiska uruchomieniowego Javy.

13.2.2. API PreferencesKlasa Properties, mimo i umo liwia zapisywanie i odczytywanie danych konfiguracyjnychw prosty sposób, ma kilka wad:

Nie zawsze mamy mo liwo zapisania plików konfiguracyjnych w katalogug ównym u ytkownika, poniewa niektóre systemy operacyjne nie znajkoncepcji katalogu g ównego.

Nie istnieje standardowa konwencja nazywania plików konfiguracyjnych,co wi e si z ryzykiem wyst pienia konfliktów nazw, je li u ytkownikzainstaluje kilka aplikacji Java.

Niektóre systemy operacyjne maj centralne repozytorium, w którym przechowuj dane kon-figuracyjne. Najlepszym przyk adem takiego repozytorium jest rejestr w systemie MicrosoftWindows. Klasa Preferences pozwala utworzy takie repozytorium niezale nie od platformy.W systemie Windows klasa ta wykorzystuje rejestr. W systemie Linux informacje te s zapi-sywane w lokalnym systemie plików. Oczywi cie implementacja repozytorium nie ma tajem-nic dla programisty u ywaj cego klasy Preferences.

Repozytorium Preferences ma struktur drzewiast z nazwami cie ek do w z ów typu/com/mycompany/myapp. Podobnie jak w przypadku pakietów, konfliktów nazw cie ek unikasi , stosuj c odwrócone nazwy domen. Projektanci tego API zalecaj nawet, aby cie kom dow z ów konfiguracyjnych nadawa takie same nazwy jak pakietom u ywanym w programie.

Ka dy w ze w repozytorium ma oddzieln tablic par klucz – warto , w której mo naprzechowywa a cuchy, liczby i tablice bajtów. Nie ma mo liwo ci zapisywania obiektówserializowanych, poniewa projektanci uznali, e format ten jest zbyt ulotny do d ugotermi-nowego przechowywania. Oczywi cie ci, którzy si z tym nie zgadzaj , mog zapisywa seria-lizowane obiekty w tablicach bajtów.

Wi ksz elastyczno zapewniaj dodatkowe równoleg e drzewa. Ka dy u ytkownik programuma w asne drzewo i dodatkowe drzewo systemowe, które przechowuje ustawienia wspólnewszystkich u ytkowników. Odpowiednie drzewo ustawie jest pobierane przez klas Preferencesprzy u yciu poj cia bie cego u ytkownika, rozumianego zgodnie z systemem operacyjnym.

Poleć książkęKup książkę

Page 27: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 707

Aby uzyska dost p do w z a drzewa, nale y zacz od u ytkownika root lub katalogusystemowego root:

Preferences root = Preferences.userRoot();

lubPreferences root = Preferences.systemRoot();

Nast pnie uzyskujemy dost p do w z a. Mo na ograniczy si do podania jego cie ki:Preferences node = root.node("/com/mycompany/myapp");

Za pomoc wygodnego skrótu mo na pobra w ze , którego cie ka jest taka sama jak nazwapakietu klasy. Wystarczy pobra obiekt tej klasy i zastosowa poni sze wywo anie:

Preferences node = Preferences.userNodeForPackage(obj.getClass());

lubPreferences node = Preferences.systemNodeForPackage(obj.getClass());

Zazwyczaj obj jest referencj this.

Maj c w ze , mo na uzyska dost p do jego tablicy par klucz – warto za pomoc nast pu-j cych metod:

String get(String key, String defval)int getInt(String key, int defval)long getLong(String key, long defval)float getFloat(String key, float defval)double getDouble(String key, double defval)boolean getBoolean(String key, boolean defval)byte[] getByteArray(String key, byte[] defval)

Nale y pami ta , e przy odczytywaniu informacji trzeba dostarczy warto domy ln , nawypadek gdyby w repozytorium brakowa o jakich danych. Warto ci domy lne s wymaganez kilku powodów. Danych mo e brakowa , poniewa u ytkownik nigdy nie ustawi danej opcji.Niektóre ograniczone platformy mog nie mie repozytorium, a urz dzenia przeno ne mogby tymczasowo od czone od repozytorium.

Do zapisu danych w repozytorium s u metody put:put(String key, String value)putInt(String key, int value)

i tak dalej.

List wszystkich kluczy zapisanych w w le mo na uzyska za pomoc metody String[] keys.Nie ma jednak obecnie sposobu na sprawdzenie typu warto ci okre lonego klucza.

Centralne repozytoria, takie jak rejestr w systemie Windows, zazwyczaj cierpi z dwóchpowodów:

Z czasem zamieniaj si w mietnisko pe ne przestarza ych informacji.

Dane konfiguracyjne pl cz si w repozytorium, przez co trudno jest je przeniena inn platform .

Poleć książkęKup książkę

Page 28: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

708 Java. Podstawy

Klasa Preferences ma rozwi zanie drugiego problemu. Mo na wyeksportowa ustawieniapoddrzewa (lub — rzadziej — jednego w z a) za pomoc poni szych metod:

void exportSubtree(OutputStream out)void exportNode(OutputStream out)

Dane s zapisywane w formacie XML. Mo na je zaimportowa do innego repozytorium zapomoc nast puj cego wywo ania:

void importPreferences(InputStream in)

Poni ej znajduje si zawarto przyk adowego pliku:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd"><preferences EXTERNAL_XML_VERSION="1.0"> <root type="user"> <map/> <node name="com"> <map/> <node name="horstmann"> <map/> <node name="corejava"> <map> <entry key="left" value="11"/> <entry key="top" value="9"/> <entry key="width" value="453"/> <entry key="height" value="365"/> <entry key="title" value="Witaj, wiecie!"/> </map> </node> </node> </node> </root></preferences>

Je li program wykorzystuje klas Preferences, nale y umo liwi u ytkownikowi import i eks-port ustawie , co u atwia przenoszenie ustawie na inny komputer. Program na listingu 13.3demonstruje omówion technik . Zapisuje on po o enie, rozmiar i tytu g ównego okna. Pozamkni ciu i ponownym uruchomieniu programu okno b dzie wygl da o dok adnie tak samojak przed zamkni ciem programu.

Listing 13.3. preferences/PreferencesTest.java

package preferences;

import java.awt.*;import java.io.*;import java.util.prefs.*;

import javax.swing.*;import javax.swing.filechooser.*;

/** * Program testuj cy ustawianie preferencji. Zapami tuje po o enie, rozmiar i tytu ramki. * @version 1.03 2015-06-12 * @author Cay Horstmann */

Poleć książkęKup książkę

Page 29: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 709

public class PreferencesTest{ public static void main(String[] args) { EventQueue.invokeLater(() -> { PreferencesFrame frame = new PreferencesFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }); }}

/** * Ramka pobieraj ca dane dotycz ce po o enia i rozmiaru z preferencji u ytkownika oraz aktualizuj ca * preferencje w momencie zamykania programu */class PreferencesFrame extends JFrame{ private static final int DEFAULT_WIDTH = 300; private static final int DEFAULT_HEIGHT = 200; private Preferences root = Preferences.userRoot(); private Preferences node = root.node("/com/horstmann/corejava");

public PreferencesFrame() { // Sprawdzanie po o enia, rozmiaru i tytu u w preferencjach

int left = node.getInt("left", 0); int top = node.getInt("top", 0); int width = node.getInt("width", DEFAULT_WIDTH); int height = node.getInt("height", DEFAULT_HEIGHT); setBounds(left, top, width, height);

// Je li nie ma tytu u, u ytkownik zostanie poproszony o jego podanie

String title = node.get("title", ""); if (title.equals("")) title = JOptionPane.showInputDialog("Podaj tytu ramki:"); if (title == null) title = ""; setTitle(title);

// Utworzenie okna wyboru plików wy wietlaj cego pliki XML

final JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(".")); chooser.setFileFilter(new FileNameExtensionFilter("Pliki XML", "xml"));

// utworzenie menu

JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); JMenu menu = new JMenu("Plik"); menuBar.add(menu);

JMenuItem exportItem = new JMenuItem("Eksportuj preferencje"); menu.add(exportItem); exportItem .addActionListener(event -> {

Poleć książkęKup książkę

Page 30: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

710 Java. Podstawy

if (chooser.showSaveDialog(PreferencesFrame.this) == JFileChooser.APPROVE_OPTION) { try { savePreferences(); OutputStream out = new FileOutputStream(chooser .getSelectedFile()); node.exportSubtree(out); out.close(); } catch (Exception e) { e.printStackTrace(); } } });

JMenuItem importItem = new JMenuItem("Importuj preferencje"); menu.add(importItem); importItem .addActionListener(event -> { if (chooser.showOpenDialog(PreferencesFrame.this) == JFileChooser.APPROVE_OPTION) { try { InputStream in = new FileInputStream(chooser .getSelectedFile()); Preferences.importPreferences(in); in.close(); } catch (Exception e) { e.printStackTrace(); } } });

JMenuItem exitItem = new JMenuItem("Zamknij"); menu.add(exitItem); exitItem.addActionListener(event -> { savePreferences(); System.exit(0); }); }

public void savePreferences() { node.putInt("left", getX()); node.putInt("top", getY()); node.putInt("width", getWidth()); node.putInt("height", getHeight()); node.put("title", getTitle()); }}

Poleć książkęKup książkę

Page 31: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 711

java.util.prefs.Preferences 1.4

Preferences userRoot()

Zwraca w ze preferencji root u ytkownika programu.

Preferences systemRoot()

Zwraca w ze preferencji root systemu.

Preferences node(String path)

Zwraca w ze , do którego mo na uzyska dost p z bie cego w z aza po rednictwem podanej cie ki path. Je li cie ka jest bezwzgl dna (czyli zaczynasi od znaku /), szukanie w z a zaczyna si od korzenia drzewa zawieraj cego tenw ze preferencji. Je li w ze w podanej cie ce nie istnieje, zostanie utworzony.

Preferences userNodeForPackage(Class cl)

Preferences systemNodeForPackage(Class cl)

Zwraca w ze w bie cym drzewie u ytkownika lub drzewo systemowe, któregocie ka bezwzgl dna w z a odpowiada nazwie pakietu klasy cl.

String[] keys()

Zwraca wszystkie klucze nale ce do w z a.

String get(String key, String defval)

int getInt(String key, int defval)

long getLong(String key, long defval)

float getFloat(String key, float defval)

double getDouble(String key, double defval)

boolean getBoolean(String key, boolean defval)

byte[] getByteArray(String key, byte[] defval)

Zwraca warto skojarzon z danym kluczem lub podan warto domy ln ,je li z kluczem nie jest skojarzona adna warto lub skojarzona wartojest nieprawid owego typu, lub magazyn preferencji nie jest dost pny.

void put(String key, String value)

void putInt(String key, int value)

void putLong(String key, long value)

void putFloat(String key, float value)

void putDouble(String key, double value)

void putBoolean(String key, boolean value)

void putByteArray(String key, byte[] value)

Zapisuje par klucz – warto w w le.

Poleć książkęKup książkę

Page 32: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

712 Java. Podstawy

void exportSubtree(OutputStream out)

Zapisuje preferencje w z a i jego potomków w okre lonym strumieniu.

void exportNode(OutputStream out)

Zapisuje preferencje w z a (ale nie jego potomków) w okre lonym strumieniu.

void importPreferences(InputStream in)

Importuje preferencje zawarte w okre lonym strumieniu.

13.3. Modu y adowania us ugNiektóre aplikacje specjalnie buduje si tak, by by o atwo rozbudowywa ich funkcjonalno zapomoc wtyczek. Istniej nawet platformy u atwiaj ce to zadanie, np. OSGi (http://osgi.org),które wykorzystuje si w rodowiskach programistycznych, serwerach aplikacji i innychz o onych programach. Opis tych platform wykracza daleko poza temat tej ksi ki, alewarto wiedzie , e JDK równie zawiera prosty mechanizm do adowania wtyczek. Jegoopis zamieszczamy poni ej.

Twórcy programów obs uguj cych wtyczki cz sto pozostawiaj programistom tych dodatkówpewien zakres wolno ci pod wzgl dem sposobu implementacji swoich produktów. Dobrzejest te mie do wyboru kilka implementacji. Klasa ServiceLoader sprawia, e adowaniewtyczek spe niaj cych wymagania okre lonego wspólnego interfejsu jest bardzo atwe.

Nale y zdefiniowa interfejs (lub, je li kto woli, nadklas ) z metodami, które musz byzdefiniowane przez ka dy egzemplarz us ugi. Powiedzmy na przyk ad, e stworzyli myus ug szyfrowania:

package serviceLoader;

public interface Cipher{ byte[] encrypt(byte[] source, byte[] key); byte[] decrypt(byte[] source, byte[] key); int strength();}

Dostawca us ug zapewnia przynajmniej jedn klas implementuj c t us ug , np.:package serviceLoader.impl;

public class CaesarCipher implements Cipher{ public byte[] encrypt(byte[] source, byte[] key) { byte[] result = new byte[source.length]; for (int i = 0; i < source.length; i++) result[i] = (byte)(source[i] + key[0]); return result; }

Poleć książkęKup książkę

Page 33: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 713

public byte[] decrypt(byte[] source, byte[] key) { return encrypt(source, new byte[] { (byte) -key[0] }); }

public int strength() { return 1; }}

Klasy implementacyjne mog nale e do dowolnego pakietu, tzn. nie musz si znajdowaw tym samym pakiecie co interfejs us ugi. Ka da z nich musi natomiast mie konstruktorbezargumentowy.

Teraz dodamy nazwy klas do pliku tekstowego UTF-8 znajduj cego si w katalogu META-INF/services. Nazwa tego pliku musi si zgadza z pe n nazw klasy. W naszym przypadku ozna-cza to, e plik META-INF/services/serviceLoader.Cipher b dzie zawiera nast puj cy wiersz:

serviceLoader.impl.CaesarCipher

Teraz dostarczyli my tylko jedn klas implementacyjn , ale w razie potrzeby mo emy do-da ich wi cej i wybiera t , która w danym przypadku jest najodpowiedniejsza.

Po tych przygotowaniach program inicjalizuje modu aduj cy us ugi w nast puj cy sposób:public static ServiceLoader<Cipher> cipherLoader = ServiceLoader.load(Cipher.class);

Wystarczy to zrobi tylko raz w programie.

Metoda iterator modu u adowania us ug zwraca iterator do przegl dania wszystkich dostar-czonych implementacji us ugi. (Szerzej na temat iteratorów piszemy w rozdziale 9.). Aby jeprzejrze , naj atwiej pos u y si rozszerzon p tl for, w której mo na wybra odpowiedniobiekt do wiadczenia us ugi.

public static Cipher getCipher(int minStrength){ for (Cipher cipher : cipherLoader) // niejawnie wywo uje cipherLoader.iterator() { if (cipher.strength() >= minStrength) return cipher; } return null;}

java.util.ServiceLoader<S> 1.6

static <S> ServiceLoader<S> load(Class<S> service)

Tworzy modu adowania us ug s u cy do wczytywania klas implementuj cychokre lony interfejs us ugowy.

Iterator<S> iterator()

Zwraca iterator, który leniwie aduje klasy us ug, tzn. za adowanie klasynast puje po przesuni ciu iteratora do przodu.

Poleć książkęKup książkę

Page 34: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

714 Java. Podstawy

13.4. ApletyAplety to programy w j zyku Java do czane do stron HTML. Strona HTML musi poinfor-mowa przegl dark , które aplety ma za adowa oraz gdzie maj one by rozmieszczone. Jaknietrudno si domy li , znacznik s u cy do wstawiania apletów musi dostarcza informacjedotycz ce lokalizacji plików klas oraz samego apletu (jego rozmiaru, lokalizacji itd.). Przegl -darka pobiera pliki klas z internetu (lub katalogu na urz dzeniu u ytkownika) i automatycznieuruchamia aplet.

Na pocz tku istnienia apletów jedyn przegl dark , która je obs ugiwa a, by a HotJava firmySun. Oczywi cie znalaz o si niewiele osób, które by y sk onne u ywa oddzielnej przegl -darki dla jednej dodatkowej funkcji. Aplety zyska y prawdziw popularno z chwil do -czenia przez firm Netscape maszyny wirtualnej Javy do przegl darki Navigator. Nied ugopó niej to samo zrobi a firma Microsoft w przegl darce Internet Explorer. Niestety Microsoftpodci skrzyd a Netscape, opornie dodaj c obs ug starych wersji Javy w Internet Explorerze,a w ko cu ca kiem tego zaniecha .

Problem ten rozwi zuje narz dzie Java Plug-in. Integruje si ono z przegl darkami jako roz-szerzenie, co umo liwia uruchamianie apletów przy wykorzystaniu zewn trznego rodo-wiska uruchomieniowego Javy.

Przez wiele lat by o to dobre rozwi zanie, a jako aplety powszechnie implementowa o simateria y edukacyjne, aplikacje biznesowe oraz niektóre gry. Niestety firma Sun, a po jejznikni ciu firma Oracle niespiesznie ata y luki w zabezpieczeniach maszyny wirtualnejJavy, które od czasu do czasu kto wykrywa i wykorzystywa w niecnych zamiarach. S abozabezpieczona maszyna wirtualna nara a a u ytkowników na spore ryzyko, wi c producenciprzegl darek postanowili ograniczy mo liwo korzystania z Javy w swoich produktach.Niektórzy zezwalali na u ywanie tylko najnowszej wersji wtyczki Java, a inni porzucili wspar-cie dla architektury wtyczkowej. Niestety reakcja firmy Oracle na to, co si dzieje, by a rozcza-rowuj ca. Firma zacz a wymaga , aby wszystkie aplety by y podpisane cyfrowo (zobaczsekcj 13.4.9, „Podpisywanie kodu”).

Z tych powodów dzi wdro enie apletu Java jest sporym wyzwaniem dla programisty, a dlau ytkownika — jego uruchomienie. Dlatego te dalsza cz tego rozdzia u zainteresujeg ownie tych czytelników, którzy spotykaj si w pracy ze starymi apletami.

Aby móc uruchamia aplety opisywane w tym rozdziale, nale y zainstalowa najnow- sz wersj narz dzia Java Plug-in i upewni si , e przegl darka jest po czona

z wtyczk . Dodatkowo, aby móc testowa aplety, nale y tak skonfigurowa wtyczk ,by ufa a plikom lokalnym. Piszemy o tym w podrozdziale 2.5, „Tworzenie i uruchamianieapletów”.

Poleć książkęKup książkę

Page 35: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 715

13.4.1. Prosty aplet

Aby tradycji sta o si zado , przerobimy program NotHelloWorld na aplet. Aplet to zwy-k a klasa Javy rozszerzaj ca klas java.applet.Applet. Do implementacji apletów u yjemySwinga. Wszystkie nasze aplety b d rozszerza y klas JApplet, która jest nadklas apletówSwing. Jak wida na rysunku 13.2, klasa JApplet jest bezpo redni podklas klasy Applet.

Rysunek 13.2.Diagramdziedziczeniaklasy Applet

Je li aplet zawiera sk adniki Swing, nale y rozszerzy klas JApplet. Komponenty Swing w zwyk ym kontenerze Applet nie s poprawnie rysowane.

Na listingu 13.4 przedstawiona jest apletowa wersja programu „nie powitalnego”.

Zwró uwag na du e podobie stwo do wersji z rozdzia u 10. Poniewa aplet dzia a w oknieprzegl darki, nie trzeba by o definiowa metody zamykaj cej.

Poleć książkęKup książkę

Page 36: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

716 Java. Podstawy

Listing 13.4. applet/NotHelloWorld.java

package applet;

import java.awt.*;import javax.swing.*;

/** * @version 1.24 2015-06-12 * @author Cay Horstmann */public class NotHelloWorld extends JApplet{ public void init() { EventQueue.invokeLater(() -> { JLabel label = new JLabel("To nie jest aplet Witaj, wiecie", SwingConstants.CENTER); add(label); }); }}

Uruchomienie powy szego apletu wymaga wykonania trzech czynno ci:

1. Kompilacji plików ród owych na pliki klas.

2. Spakowania klas do pliku JAR (zobacz sekcj 13.1.1, „Tworzenie plików JAR”).

3. Utworzenia pliku HTML zawieraj cego informacje o lokalizacji plików klas orazrozmiarze apletu.

Poni ej znajduje si jego zawarto :<applet code="applet/NotHelloWorld.class" width="300" height="300"></applet>

Dobrym pomys em jest przetestowanie apletu we wchodz cej w sk ad pakietu JDK przegl -darce apletów (ang. applet viewer) przed otwarciem go w przegl darce internetowej. Poni szepolecenie wiersza polece otwiera nasz aplet we wspomnianej przegl darce:

appletviewer NotHelloWorldApplet.html

Argumentem narz dzia appletviewer jest nazwa pliku HTML, nie pliku klasy. Rysunek 13.3przedstawia nasz aplet w przegl darce apletów.

Rysunek 13.3.Apletw przegl darceapletów

Poleć książkęKup książkę

Page 37: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 717

Przegl darka apletów dobrze sprawdza si jako pierwszy etap testowania. Trzeba jednakw ko cu uruchomi aplet w przegl darce, aby sprawdzi , jak b dzie si prezentowa u yt-kownikowi. Przegl darka apletów pokazuje sam aplet bez otaczaj cego go kodu HTML.Je li strona HTML zawiera kilka znaczników applet, przegl darka otworzy kilka okien.

Aby obejrze swój aplet w przegl darce, wystarczy za adowa w niej odpowiedni stronHTML (rysunek 13.4). Je li aplet nie pojawia si , nale y zainstalowa narz dzie JavaPlug-in i zezwoli mu na adowanie niepodpisanych apletów lokalnych (zobacz podrozdzia 2.5,„Tworzenie i uruchamianie apletów”).

Rysunek 13.4.Apletw przegl darce

Je li w aplecie zostan wprowadzone jakie zmiany i zostanie on raz jeszcze pod- dany kompilacji, konieczne jest ponowne uruchomienie przegl darki, aby za adowa a

nowe pliki klas. Samo od wie enie strony nie spowoduje za adowania nowej wersji apletu.Bywa to k opotliwe przy szukaniu b dów. Mo na unikn ponownego uruchamiania prze-gl darki dzi ki u yciu konsoli Javy. Nale y uruchomi t konsol i wyda polecenie x, któ-re czy ci pami programu aduj cego klasy. Wtedy po od wie eniu strony zostanie za-adowana nowa wersja apletu. W systemie Windows nale y otworzy panel kontrolnyJava Plug-in znajduj cy si w Panelu sterowania. W systemie Linux nale y u y poleceniajcontrol i za da wy wietlenia panelu kontrolnego Javy. Konsola b dzie si pojawiaza ka dym razem, kiedy adowany jest aplet.

Graficzne aplikacje w Javie mo na z atwo ci przekonwertowa na aplety. Ca y kod doty-cz cy interfejsu u ytkownika pozostaje bez zmian. Oto lista niezb dnych czynno ci:

1. Utwórz stron HTML z odpowiednim znacznikiem wstawiaj cym aplet.

2. Utwórz podklas klasy JApplet. Zdefiniuj t klas jako publiczn . W przeciwnymrazie apletu nie b dzie mo na za adowa .

3. Usu z aplikacji metod main. Nie twórz ramki dla aplikacji, poniewa b dzieona wy wietlana w oknie przegl darki.

Poleć książkęKup książkę

Page 38: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

718 Java. Podstawy

4. Przenie kod inicjalizuj cy z konstruktora ramki do metody init apletu. Nie trzebajawnie konstruowa obiektu apletu — przegl darka robi to automatyczniei wywo uje metod init.

5. Usu wywo anie metody setSize. W apletach za rozmiary odpowiadaj parametryHTML width i height.

6. Usu wywo anie metody setDefaultCloseOperation. Apletu nie mo na zamkn— jego dzia anie ko czy si w chwili zamkni cia przegl darki.

7. Je li w programie znajduje si wywo anie metody setTitle, nale y je usun . Apletynie maj pasków tytu u (mo na oczywi cie nada tytu samej stronie HTMLza pomoc znacznika title).

8. Nie wywo uj metody setVisible(true). Aplet jest wy wietlany automatycznie.

java.applet.Applet 1.0

void init()

Jest wywo ywana przy pierwszym adowaniu apletu. Metod t nale y przes onii umie ci w niej ca y kod inicjalizuj cy.

void start()

Nale y przes oni t metod i umie ci w niej kod, który ma by wykonywanyza ka dym razem, gdy u ytkownik odwiedza stron zawieraj c ten aplet.Do typowych dzia a nale y tu reaktywacja w tku.

void stop()

Nale y przes oni t metod i umie ci w niej kod, który ma by wykonywanyza ka dym razem, gdy u ytkownik opuszcza stron zawieraj c ten aplet.Do typowych dzia a nale y tu dezaktywacja w tku.

void destroy()

Metod t nale y przedefiniowa , wstawiaj c do niej kod wykonywanyw momencie zamkni cia przegl darki.

void resize(int width, int height)

Wymusza zmian rozmiaru apletu. By aby to doskona a metoda, gdyby dzia a ana stronach internetowych. Niestety obecnie nie dzia a w przegl darkach, poniewazak óca ich mechanizm rozk adu elementów na stronie.

13.4.2. Znacznik applet i jego atrybuty

Znacznik applet w najprostszej postaci mo e wygl da nast puj co:<applet code="NotHelloWorld.class" archive="NotHelloWorld.jar" width="300"height="100"></applet>

Poleć książkęKup książkę

Page 39: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 719

Znacznik applet ma nast puj ce atrybuty:

width, height

Atrybuty te s wymagane i okre laj szeroko i wysoko apletu w pikselach.W przegl darce apletów wymiary te s traktowane jako pocz tkowe, ale rozmiarka dego okna tej przegl darki mo na zmieni . W przegl darce internetowej nie mamo liwo ci zmiany rozmiaru apletu. Optymalny rozmiar apletu, tak aby wygl dadobrze u ka dego u ytkownika, nale y okre li metod prób i b dów.

align

Okre la wyrównanie apletu. Warto ci tego atrybutu s takie same jak atrybutualign znacznika img.

vspace, hspace

Okre laj liczb pikseli nad i pod apletem (vspace) oraz po jego obu stronach(hspace).

code

Okre la nazw pliku klasy apletu.

cie ka musi si zgadza z pakietem, do którego nale y klasa. Je li na przyk adklasa apletu nale y do pakietu com.mycompany, atrybut wygl da nast puj cocode="com/mycompany/MyApplet.class". Mo na te stosowa alternatywny zapisw postaci code="com.mycompany.MyApplet.class".

Atrybut code okre la tylko nazw klasy apletu. Oczywi cie sam aplet mo e zawieratak e inne pliki klas. Kiedy przegl darka za aduje klas zawieraj c aplet, zorientujesi , e potrzebne s dodatkowe klasy, i je równie za aduje.

archive

Okre la list plików JAR lub plików zawieraj cych klasy i inne zasoby apletu, któres pobierane z serwera przed jego za adowaniem. Pliki JAR na li cie srozdzielane przecinkami:

<applet code="MyApplet.class" archive="MyClasses.jar,corejava/CoreJavaClasses.jar" width="100" height="150">

codebase

Okre la adres URL, pod którym znajduj si pliki JAR (a kiedy tak e plikiklas) do za adowania.

object

Przestarza y atrybut okre laj cy nazw pliku zawieraj cego poddany serializacjiobiekt apletu, który mia by wykorzystany w celu przechowania stanu apletu.Funkcja ta jest ju bezu yteczna, poniewa nie ma mo liwo ci podpisaniapliku poddanego serializacji.

alt

W atrybucie tym mo na zdefiniowa tekst do wy wietlenia, gdy przegl darkanie obs uguje Javy.

Poleć książkęKup książkę

Page 40: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

720 Java. Podstawy

Je li przegl darka w ogóle nie rozpoznaje apletów, czyli pochodzi z czasówprehistorycznych, ignoruje znaczniki applet i param. W takiej sytuacji zostaniewy wietlony tekst znajduj cy si pomi dzy znacznikami <applet> i </applet>.Natomiast przegl darki obs uguj ce aplety nie wy wietlaj tego tekstu.Na przyk ad:

<applet . . . alt="Gdyby Twoja przegl darka obs ugiwa a Jav , w tym miejscuby by widoczny mój aplet.">

Gdyby Twoja przegl darka obs ugiwa a Jav , w tym miejscu by by widoczny mój aplet.</applet>

name

Twórcy skryptów wykorzystuj ten atrybut do odwo ywania si do apletu w swoichskryptach. Przegl darki Netscape i Internet Explorer zezwalaj na wywo ywaniemetod apletów na stronie za po rednictwem JavaScriptu.

Aby uzyska dost p do apletu z poziomu JavaScriptu, najpierw nale y nada munazw :

<applet ... name="mine"></applet>

Dzi ki temu mo na si do niego odwo ywa za pomoc zapisudocument.applets.nazwaapletu. Na przyk ad:

var myApplet = document.applets.mine;

Mo na wywo ywa metody apletu:myApplet.init();

Atrybut name ma tak e kluczowe znaczenie w sytuacjach, kiedy dwa apletyznajduj ce si na tej samej stronie maj si ze sob bezpo rednio komunikowa .Nale y nada nazw ka demu apletowi. a cuch ten nale y przekaza do metodygetApplet z klasy AppletContext. Mechanizm ten, o nazwie komunikacja mi dzyapletami (ang. inter-applet communication), zosta opisany nieco dalej w tymrozdziale.

Na stronie http://www.javaworld.com/javatips/jw-javatip80.html Francis Lu wyko- rzystuje mechanizm komunikacji Javy z JavaScriptem do rozwi zania odwiecznego

problemu zmiany rozmiaru apletu, na sta e ustawionego przez atrybuty width i height.Jest to dobry przyk ad integracji tych dwóch j zyków.

13.4.3. Parametry przekazuj ce informacje do apletówPodobnie jak aplikacje wykorzystuj informacje podawane za po rednictwem wiersza polece ,aplety u ywaj parametrów podawanych w plikach HTML. S u y do tego znacznik parami jego atrybuty. Wyobra my sobie, e chcemy, aby na stronie internetowej mo na by o usta-wi krój czcionki u ywanej w aplecie. Mo na do tego u y nast puj cego kodu HTML:

<applet code="FontParamApplet.class" width="200" height="200"> <param name="font" value="Helvetica"/></applet>

Poleć książkęKup książkę

Page 41: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 721

Nast pnie warto parametru pobieramy za pomoc metody getParameter z klasy Applet:public class FontParamApplet extends JApplet{ public void init() { String fontName = getParameter("font"); . . . } . . .}

Metod getParameter mo na wywo ywa tylko w metodzie init apletu, nie w kon- struktorze, poniewa w chwili jego wykonywania parametry nie s jeszcze gotowe.

Poniewa uk ad wi kszo ci bardziej rozbudowanych apletów jest zdeterminowany przezparametry, zalecamy zaniechanie u ywania konstruktorów w apletach. Ca y kod inicjalizu-j cy mo na umie ci w metodzie init.

Parametry s zawsze zwracane jako a cuchy. Je li wymagana jest liczba, a cuch trzebaprzekonwertowa na typ liczbowy. S u do tego standardowe metody, takie jak parseIntz klasy Integer.

Na przyk ad kod HTML zawieraj cy parametr size, który okre la rozmiar czcionki, móg bywygl da nast puj co:

<applet code="FontParamApplet.class" ...> <param name="font" value="Helvetica"/> <param name="size" value="24"/></applet>

Poni szy fragment kodu demonstruje sposób odczytu parametru liczbowego:public class FontParamApplet extends JApplet{ public void init() { String fontName = getParameter("font"); int fontSize = Integer.parseInt(getParameter("size")); . . . }}

Przy porównywaniu warto ci atrybutu name ze znacznika param z argumentem metody getParameter nie jest rozpoznawana wielko liter.

Poza upewnieniem si , e parametry w kodzie pasuj , nale y sprawdzi , czy parametr sizezosta ustawiony, czy nie. S u y do tego prosty test na obecno warto ci null. Na przyk ad:

int fontsize;String sizeString = getParameter("size");if (sizeString == null) fontSize = 12;else fontSize = Integer.parseInt(sizeString);

Poleć książkęKup książkę

Page 42: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

722 Java. Podstawy

Rysunek 13.5 przedstawia aplet rysuj cy wykres s upkowy, który w du ym stopniu wyko-rzystuje parametry.

Rysunek 13.5.Apletwy wietlaj cywykres

Aplet ten pobiera etykiety i wysoko ci s upków z warto ci atrybutów znacznika param. Poni-ej znajduje si kod HTML strony widocznej na rysunku 13.5.

<applet code="Chart.class" width="400" height="300"> <param name="title" value=" rednice planet"/> <param name="values" value="9"/> <param name="name.1" value="Merkury"/> <param name="name.2" value="Wenus"/> <param name="name.3" value="Ziemia"/> <param name="name.4" value="Mars"/> <param name="name.5" value="Jowisz"/> <param name="name.6" value="Saturn"/> <param name="name.7" value="Uran"/> <param name="name.8" value="Neptun"/> <param name="name.9" value="Pluton"/> <param name="value.1" value="3100"/> <param name="value.2" value="7500"/> <param name="value.3" value="8000"/> <param name="value.4" value="4200"/> <param name="value.5" value="88000"/> <param name="value.6" value="71000"/> <param name="value.7" value="32000"/> <param name="value.8" value="30600"/> <param name="value.9" value="1430"/></applet>

Mo na by o utworzy w aplecie tablic a cuchów i tablic liczb, ale wykorzystanie mecha-nizmu parametrów ma dwie zalety. Po pierwsze, na jednej stronie mo na wy wietli kilka kopiitego samego apletu, pokazuj cych ró ne wykresy — trzeba zastosowa kilka znacznikówapplet z ró nymi zestawami parametrów. Po drugie, mo na zmienia dane przedstawione nawykresie. Wprawdzie rednice planet jeszcze przez jaki czas si nie zmieni , ale wyobra mysobie, e na stronie przedstawiamy tygodniowy wykres sprzeda y. Stron internetow atwosi aktualizuje, poniewa jest to czysty tekst. Edytowanie i kompilowanie plików Javy wymagaznacznie wi cej wysi ku.

Poleć książkęKup książkę

Page 43: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 723

Istniej nawet komercyjne komponenty JavaBean (tak zwane beany), które tworz o wieleatrakcyjniejsze wykresy. Podaj c parametry takiemu zakupionemu komponentowi, nie trzebanawet wiedzie nic na temat tworzenia wykresów.

Listing 13.5 przedstawia kod ród owy omawianego apletu rysuj cego wykres. Nale y zauwa-y , e metoda init pobiera parametry, a metoda paintComponent rysuje wykres.

Listing 13.5. chart/Chart.java

package chart;

import java.awt.*;import java.awt.font.*;import java.awt.geom.*;import javax.swing.*;

/** * @version 1.34 2015-06-12 * @author Cay Horstmann */public class Chart extends JApplet{ public void init() { EventQueue.invokeLater(() -> { String v = getParameter("values"); if (v == null) return; int n = Integer.parseInt(v); double[] values = new double[n]; String[] names = new String[n]; for (int i = 0; i < n; i++) { values[i] = Double.parseDouble(getParameter("value." + (i + 1))); names[i] = getParameter("name." + (i + 1)); }

add(new ChartComponent(values, names, getParameter("title"))); }); }}

/** * Komponent rysuj cy wykres s upkowy. */class ChartComponent extends JComponent{ private double[] values; private String[] names; private String title;

/** * Tworzy obiekt typu ChartComponent. * @param v tablica warto ci wykresu * @param n tablica nazw warto ci * @param t tytu wykresu */ public ChartComponent(double[] v, String[] n, String t) {

Poleć książkęKup książkę

Page 44: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

724 Java. Podstawy

values = v; names = n; title = t; }

public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g;

// Obliczanie warto ci minimalnej i maksymalnej. if (values == null) return; double minValue = 0; double maxValue = 0; for (double v : values) { if (minValue > v) minValue = v; if (maxValue < v) maxValue = v; } if (maxValue == minValue) return;

int panelWidth = getWidth(); int panelHeight = getHeight();

Font titleFont = new Font("SansSerif", Font.BOLD, 20); Font labelFont = new Font("SansSerif", Font.PLAIN, 10);

// Obliczanie szeroko ci tytu u. FontRenderContext context = g2.getFontRenderContext(); Rectangle2D titleBounds = titleFont.getStringBounds(title, context); double titleWidth = titleBounds.getWidth(); double top = titleBounds.getHeight();

// Rysowanie tytu u. double y = -titleBounds.getY(); // wysoko double x = (panelWidth - titleWidth) / 2; g2.setFont(titleFont); g2.drawString(title, (float) x, (float) y);

// Obliczanie szeroko ci etykiet s upków. LineMetrics labelMetrics = labelFont.getLineMetrics("", context); double bottom = labelMetrics.getHeight();

y = panelHeight - labelMetrics.getDescent(); g2.setFont(labelFont);

// Obliczanie wspó czynnika skali i szeroko ci s upków. double scale = (panelHeight - top - bottom) / (maxValue - minValue); int barWidth = panelWidth / values.length;

// Rysowanie s upków. for (int i = 0; i < values.length; i++) { // Uzyskanie wspó rz dnych prostok ta tworz cego s upek. double x1 = i * barWidth + 1; double y1 = top; double height = values[i] * scale; if (values[i] >= 0) y1 += (maxValue - values[i]) * scale; else {

Poleć książkęKup książkę

Page 45: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 725

y1 += maxValue * scale; height = -height; }

// Wype nienie s upka i rysowanie jego obrysu. Rectangle2D rect = new Rectangle2D.Double(x1, y1, barWidth - 2, height); g2.setPaint(Color.RED); g2.fill(rect); g2.setPaint(Color.BLACK); g2.draw(rect);

// Rysowanie etykiety na rodku pod s upkiem. Rectangle2D labelBounds = labelFont.getStringBounds(names[i], context);

double labelWidth = labelBounds.getWidth(); x = x1 + (barWidth - labelWidth) / 2; g2.drawString(names[i], (float) x, (float) y); } }}

java.applet.Applet 1.0

public String getParameter(String name)

Pobiera warto parametru zdefiniowanego w znaczniku param na stronieinternetowej aduj cej aplet. W a cuchu name rozpoznawane s ma e i wielkielitery.

public String getAppletInfo()

T metod wielu programistów przedefiniowuje, aby zwraca a a cuch zawieraj cyinformacje o autorze, wersji i prawach autorskich do apletu. Informacje te nale ypodawa poprzez przes oni cie tej metody w klasie apletu.

public String[][] getParameterInfo()

T metod mo na przedefiniowa , aby zwraca a tablic opcji znacznika param,obs ugiwanych przez aplet. Ka dy wiersz zawiera trzy pozycje: nazw , typ i opisparametru. Na przyk ad:

"fps", "1-10", "ramek na sekund ""repeat", "boolean", "powtórzy p tl obrazu?""images", "url", "katalog zawieraj cy obrazy"

13.4.4. Dost p do obrazów i plików audio

W apletach mo na u ywa obrazów i plików audio. W chwili pisania tego tekstu obs ugiwaneby y nast puj ce formaty plików graficznych: GIF, PNG i JPEG, oraz plików audio: AU, AIFF,WAV i MIDI. Animowane gify s tak e poprawnie obs ugiwane.

Lokalizacj obrazów i plików audio okre la si za pomoc wzgl dnych adresów URL. Bazowyadres URL zazwyczaj sprawdza si za pomoc metody getDocumentBase lub getCodeBase.Pierwsza z wymienionych metod pobiera adres URL strony HTML zawieraj cej aplet, a drugaadres URL katalogu bazowego kodu.

Poleć książkęKup książkę

Page 46: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

726 Java. Podstawy

Bazowy adres URL i lokalizacj pliku nale y przekaza do metody getImage lub getAudioClip.Na przyk ad:

Image cat = getImage(getCodeBase(), "images/cat.gif");AudioClip meow = getAudioClip(getCodeBase(), "audio/meow.au");

Wy wietlania obrazów nauczyli my si w rozdziale 10. Je li chodzi o pliki audio, wystar-czy wywo a metod play. Metod play z klasy Applet mo na nawet wywo a bez uprzed-niego za adowania pliku audio.

play(getCodeBase(), "audio/meow.au");

java.applet.Applet 1.0

URL getDocumentBase()

Pobiera adres URL strony zawieraj cej aplet. URL getCodeBase()

Pobiera adres URL katalogu bazowego z kodem, z którego adowany jest aplet.Jest to albo bezwzgl dny adres URL katalogu wskazywanego przez atrybut codebase,albo adres pliku HTML, je li atrybut codebase nie istnieje.

void play(URL url)

void play(URL url, String name)

Pierwsza wersja odtwarza plik d wi kowy znajduj cy si pod podanym adresemURL. Druga tworzy cie k wzgl dn wobec podanego adresu URL z podanegoa cucha. Je li pliku audio nie ma, nic si nie dzieje.

AudioClip getAudioClip(URL url)

AudioClip getAudioClip(URL url, String name)

Pierwsza wersja odtwarza plik d wi kowy znajduj cy si pod podanym adresemURL. Druga tworzy cie k wzgl dn wobec podanego adresu URL z podanegoa cucha. Je li plik audio nie istnieje, metody te zwracaj warto null.

Image getImage(URL url)

Image getImage(URL url, String name)

Zwraca obiekt typu Image zawieraj cy obraz wskazywany przez adres URL. Je liobraz nie istnieje, zwracana jest natychmiast warto null. W przeciwnym przypadkuzostaje uruchomiony osobny w tek aduj cy obraz.

13.4.5. rodowisko dzia ania apletuAplety rezyduj w przegl darce internetowej lub przegl darce apletów. Mog one wysy ado przegl darek dania dotycz ce wykonania okre lonych dzia a , typu pobranie pliku audio,wy wietlenie komunikatu w pasku stanu lub otwarcie nowej strony. Przegl darka mo e wyko-na danie lub je zignorowa . Je li na przyk ad aplet dzia aj cy w przegl darce apletów zg osi

danie otwarcia nowej strony, zostanie ono zignorowane.

Do komunikacji z przegl dark aplet wykorzystuje metod getAppletContext. Zwraca onaobiekt implementuj cy interfejs typu AppletContext. Konkretn implementacj tego inter-

Poleć książkęKup książkę

Page 47: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 727

fejsu mo na traktowa jako cie k komunikacyjn pomi dzy apletem a przegl dark . Pozametodami getAudioClip i getImage interfejs AppletContext zawiera tak e inne przydatne metody,które opisujemy w kilku kolejnych podrozdzia ach.

13.4.6. Komunikacja pomi dzy apletamiNa jednej stronie internetowej mo e si znajdowa kilka apletów. Je li wszystkie one pochodzz jednej bazy kodowej, mog si ze sob komunikowa . Jest to jednak zaawansowana technika,której nie u ywa si zbyt cz sto.

Je li ka dy aplet w pliku HTML ma okre lon nazw w atrybucie name, za pomoc metodygetApplet z interfejsu AppletContext mo na utworzy odwo anie do tego apletu. Je li naprzyk ad plik HTML zawiera poni szy znacznik:

<applet code="Chart.class" width="100" height="100" name="Chart1">

odwo anie do apletu daje poni sza instrukcja:Applet chart1 = getAppletContext().getApplet("Chart1");

Do czego mo na wykorzysta takie odwo anie? Je li klasa Chart zawiera metod przyjmuj cnowe dane i ponownie rysuj c wykres, metod t mo na wywo a , wykonuj c odpowiednierzutowanie.

((Chart) chart1).setData(3, "Ziemia", 9000);

List wszystkich apletów znajduj cych si na stronie mo na wy wietli bez wzgl du na to,czy maj one atrybut name, czy nie. Metoda getApplets zwraca obiekt typu wyliczeniowego.Poni sza p tla drukuje nazwy klas wszystkich apletów znajduj cych si na stronie:

Enumeration<Applet> e = getAppletContext().getApplets();while (e.hasMoreElements()){ Applet a = e.nextElement(); System.out.println(a.getClass().getName());}

Aplety z ró nych stron nie mog si ze sob komunikowa .

13.4.7. Wy wietlanie elementów w przegl darceAplety maj dost p do dwóch miejsc w oknie przegl darki: paska stanu i obszaru, na którymwy wietlane s strony. W obu przypadkach u ywa si metod z klasy AppletContext.

Aby wy wietli tekst w pasku stanu, nale y u y metody showStatus. Na przyk ad:showStatus(" adowanie danych . . . prosz czeka ");

Z naszego do wiadczenia wynika, e zastosowanie metody showStatus jest ogra- niczone. Przegl darka równie u ywa paska stanu i w wi kszo ci przypadków za-

st puje dostarczony przez programist tekst informacj typu Applet running. W zwi zkuz tym w pasku stanu mo na wy wietla komunikaty typu adowanie danych…, ale nietakie, które s dla u ytkownika wa ne.

Poleć książkęKup książkę

Page 48: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

728 Java. Podstawy

Aby zmusi przegl dark do otwarcia nowej strony, nale y u y metody showDocument, którmo na wywo a na kilka sposobów. Najprostsze wywo anie polega na podaniu jako argumentuadresu URL strony, która ma zosta otwarta:

URL u = new URL("http://horstmann.com/index.html");getAppletContext().showDocument(u);

Jednak takie wywo anie mo e by problematyczne, poniewa nowa strona zast puje aktualn ,co powoduje znikni cie apletu. Aby wróci do apletu, konieczne jest naci ni cie przyciskuWstecz w przegl darce.

Aby nowa strona zosta a otwarta w nowym oknie, nale y metodzie showDocument poda dodat-kowy parametr (zobacz tabel 13.2). a cuch _blank wymusza otwarcie dokumentu w nowymoknie. Co ciekawsze, korzystaj c z ramek HTML, mo na podzieli okno na kilka cz ci o uni-katowych nazwach, w których b d wy wietlane dokumenty dane przez aplet równie znaj-duj cy si w jednej z ramek. Przyk adowy kod prezentujemy w kolejnym podrozdziale.

Przegl darka apletów nie wy wietla stron internetowych. Metoda showDocument jest przez ni ignorowana.

Tabela 13.2. Metoda showDocument

Parametr okre laj cy cel Lokalizacja

_self lub brak Bie ca ramka

_parent Ramka nadrz dna

_top Ramka najwy szego rz du

_blank Nowe okno najwy szego rz du, bez nazwy

Dowolny inny a cuch Ramka o podanej nazwie; je li nie ma ramki o takiej nazwie, otwieranejest nowe okno o takiej nazwie

java.applet.Applet 1.2

public AppletContext getAppletContext()

Tworzy dost p do rodowiska przegl darki, w której dzia a aplet. Przy u yciu tychinformacji mo na kontrolowa wi kszo przegl darek.

void showStatus(String msg)

Pokazuje podany a cuch na pasku stanu przegl darki internetowej.

java.applet.AppletContext 1.0

Enumeration<Applet> getApplets()

Zwraca wyliczenie (zobacz rozdzia 9.) wszystkich apletów znajduj cychsi w tym samym rodowisku, czyli na jednej stronie internetowej.

Poleć książkęKup książkę

Page 49: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 729

Applet getApplet(String name)

Zwraca aplet o podanej nazwie znajduj cy si w bie cym kontek cie. Zwracawarto null, je li aplet nie istnieje. Przeszukiwana jest tylko bie ca stronainternetowa.

void showDocument(URL url)

void showDocument(URL url, String target)

Otwiera now stron internetow w przegl darce. Pierwsza wersja zast puje starstron now . Druga otwiera now stron w miejscu okre lonym przez parametrtarget (tabela 13.2).

13.4.8. PiaskownicaKiedy kod uruchamiany na komputerze jest pobierany ze zdalnego miejsca, spraw pierw-szorz dn staje si zawsze bezpiecze stwo. Wej cie na stron powoduje automatyczne urucho-mienie wszystkich znajduj cych si na niej apletów. Aplikacj Java Web Start mo e uruchomijedno klikni cie. Gdyby klikni cie odno nika lub wej cie na stron internetow pozwala o nauruchomienie dowolnego kodu na komputerze u ytkownika, przest pcy prze ywaliby z otywiek wykradania poufnych informacji, danych finansowych i przejmowania komputerów u yt-kowników w celu rozsy ania spamu.

Technologia Java dysponuje zaawansowanym modelem ochrony, który zapobiega wyko-rzystywaniu jej do nikczemnych post pków. Model ten zosta szczegó owo opisany w tomiedrugim. Mened er zabezpiecze (ang. security manager) kontroluje dost p do wszystkichzasobów systemowych. Przy standardowych ustawieniach zezwala tylko na nieszkodliweoperacje. Aby mo liwe by o wykonywanie dodatkowych operacji, u ytkownik musi wyra niena to zezwoli apletowi lub aplikacji.

Co pobierany zdalnie kod mo e robi na wszystkich platformach? Zawsze mo na wy wietlaobrazy, odtwarza d wi ki, odpowiada na naci ni cia przez u ytkownika klawiszy i przy-cisków myszki oraz wysy a dane wprowadzone przez u ytkownika do hosta, z którego zostaza adowany kod. Taka funkcjonalno wystarcza do zaprezentowania faktów i liczb orazinterakcji z programem edukacyjnym lub gr . Ograniczone rodowisko wykonawcze jestcz sto nazywane piaskownic (ang. sandbox). Kod dzia aj cy w piaskownicy nie mo e niczmienia w systemie u ytkownika ani go szpiegowa .

Programy dzia aj ce w piaskownicy maj nast puj ce ograniczenia:

Nie mog uruchamia adnych lokalnych programów. Nie mog czyta ani zapisywa plików w lokalnym systemie plików. Nie maj dost pu do adnych informacji o komputerze lokalnym, z wyj tkiem

wersji Javy i kilku ma o wa nych danych na temat systemu operacyjnego. Koddzia aj cy w piaskownicy w szczególno ci nie ma dost pu do nazwy u ytkownika,adresów e-mail itd.

Programy adowane z serwera zdalnego nie mog si komunikowa z adnymhostem poza tym, z którego pochodz — serwer taki nosi nazw serwerapochodzenia (ang. originating host). Dzi ki temu u ytkownik jest chronionyprzed programami, które mog wykrada wewn trzne zasoby.

Poleć książkęKup książkę

Page 50: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

730 Java. Podstawy

Wszystkie wyskakuj ce okna zawieraj komunikat ostrzegawczy. Ma on na celuzabezpieczenie przed pomyleniem ich z oknem aplikacji lokalnej. Istniej obawy,e nic niepodejrzewaj cy u ytkownik wejdzie na stron internetow , podst pem

zostanie zmuszony do uruchomienia zdalnego kodu, a nast pnie wpisze has olub numer karty kredytowej, które zostan przes ane z powrotem do serwera.We wczesnych wersjach JDK komunikat ten brzmia bardzo z owieszczo: UntrustedJava Applet Window. W ka dej kolejnej wersji brzmienie to by o nieco agodzone:Unauthenticated Java Applet Window czy Warning: Java Applet Window. Obecniejest to drobny trójk t, którego wi kszo u ytkowników nawet nie zauwa y.

Koncepcja piaskownicy straci a ju na znaczeniu. Kiedy ka dy móg wdra a kod do urucha-miania w tym ograniczonym rodowisku i tylko kod dzia aj cy poza nim musia by cyfro-wo podpisany. Obecnie podpisu cyfrowego wymagaj wszystkie programy uruchamiane zapo rednictwem programu Java Plug-in, niezale nie od tego, czy dzia aj one w piaskownicy,czy nie.

13.4.9. Podpisywanie koduPliki JAR aplikacji Java Web Start musz by podpisane cyfrowo. Podpisany plik JAR macertyfikat okre laj cy to samo tego, kto go podpisa . Techniki kryptograficzne daj pewno ,e certyfikat taki nie jest sfa szowany, a wszelkie próby zmiany jego zawarto ci s natych-

miast wykrywane.

Wyobra my sobie, e pobieramy aplikacj utworzon i podpisan cyfrowo przez firm yWorksGmbH z certyfikatem wydanym przez o rodek certyfikacji Thawte (rysunek 13.6). Odbieraj caplikacj , mamy pewno , e:

Rysunek 13.6.Certyfikatbezpiecze stwa

1. Kod aplikacji nie zosta zmieniony w aden sposób od chwili jej podpisania.

2. Podpis rzeczywi cie pochodzi od firmy yWorks.

Poleć książkęKup książkę

Page 51: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 731

3. Certyfikat naprawd zosta wydany przez o rodek Thawte (mechanizm Java Plug-inpotrafi sprawdza certyfikaty wydane przez Thawte i kilka innych instytucji;istnieje równie mo liwo zainstalowania innych „podstawowych certyfikatów”).

Je li klikniemy odno nik More Information, dowiemy si , e aplikacja zostanie uruchomionabez zwyczajowych ogranicze . To, czy zainstalowa t aplikacj , czy nie, w du ej mierze zale yod tego, czy ufamy firmie yWorks.

Koszty uzyskania certyfikatu od jednego z obs ugiwanych dostawców wynosz kilkasetdolarów rocznie, a niektóre organizacje wymagaj dodatkowo dowodu istnienia firmy lub li-cencji biznesowej. Kiedy niektórzy programi ci Javy po prostu generowali w asne certyfikaty,które wykorzystywali do podpisywania kodu. Oczywi cie Java Plug-in nie ma mo liwo cisprawdzenia, czy s one poprawne. Mimo to kiedy program ten wy wietla taki certyfikatu ytkownikowi do zatwierdzenia. Mechanizm ten by kompletnie bezu yteczny, poniewatylko nieliczni u ytkownicy wiedzieli, jaka jest ró nica mi dzy bezpiecznym i niebezpiecz-nym certyfikatem. Dlatego te niebezpieczne certyfikaty nie s ju obs ugiwane.

Obecnie kto , kto chce rozprowadzi aplet Java lub aplikacj Web Start, nie ma wielkiegowyboru. Musi zdoby certyfikat od odpowiedniej organizacji uznawanej przez Java Plug-ini podpisywa przy jego u yciu swoje pliki JAR.

Wiele firm nawi zuje sta wspó prac z organizacjami certyfikuj cymi, wi c je li pracu-jesz w jednej z nich, to wystarczy zamówi certyfikat do podpisania swojego kodu. Je elinie, to warto si rozejrze , poniewa ceny bywaj bardzo zró nicowane i niektórzy dostaw-cy oferuj nieco dogodniejsze warunki odbiorcom indywidualnym.

Wraz z certyfikatem otrzymasz instrukcj , jak go zainstalowa w magazynie kluczy Javy— specjalnym pliku chronionym has em, z którego certyfikat mo e zosta pobrany w trakcieprocesu podpisywania. Magazyn kluczy i has o nale y przechowywa w bezpiecznym miejscu.

Nast pnie trzeba zdecydowa , jakie uprawnienia b d potrzebne. Do wyboru s uprawnienia pia-skownicy i pe ne. Wyboru dokonuje si w pliku manifestu (zobacz sekcj 13.1.2, „Manifest”).

Dodaj instrukcj Permissions: sandbox lub Permissions: all-permissions, np.:Manifest-Version: 1.0Permissions: all-permissions

U yj narz dzia jar:jar cvfm MyApplet.jar manifest.mf mypackage/*.class

Element applet w pliku HTML powinien mie zdefiniowany atrybut archive="MyApplet.jar".

Na koniec nale y podpisa plik JAR. Oto odpowiednie polecenie:jarsigner -keystore plikmagazynukluczy -tsa URLznacznikaczasu MyApplet.jar aliasklucza

Adres URL do pobrania znacznika czasu otrzymuje si od wydawcy certyfikatu. Alias kluczate zosta przydzielony przez wydawc certyfikatu. Mo na go sprawdzi za pomoc poni szegopolecenia:

keytool -keystore plikzkluczami -list

Poleć książkęKup książkę

Page 52: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

732 Java. Podstawy

Ewentualnie alias klucza mo na zmieni za pomoc opcji -changealias polecenia keytool.(Wi cej informacji na temat narz dzia keytool znajduje si w rozdziale 9. drugiego tomu).

Teraz pozostaje ju tylko wys anie podpisanego pliku JAR i pliku HTML z elementem appletna serwer.

Uprawnienia aplikacji Java mo na dok adnie kontrolowa , o czym szerzej piszemy w rozdziale 12. drugiego tomu. System ten jednak nigdy nie by u ywany w sposób

maj cy jakiekolwiek znaczenie dla zwyk ych u ytkowników. Program Java Plug-in udost p-nia tylko dwa poziomy bezpiecze stwa — piaskownic i wszystkie uprawnienia.

13.5. Java Web StartJava Web Start jest technologi uruchamiania aplikacji bezpo rednio z internetu. AplikacjeJava Web Start maj nast puj ce cechy:

S zazwyczaj dostarczane za po rednictwem przegl darki. Po pobraniu aplikacjaJava Web Start mo e by uruchamiana bez u ycia przegl darki.

Nie rezyduj w oknie przegl darki. Aplikacja dzia a we w asnym oknie ramowym,poza przegl dark .

Nie wykorzystuj implementacji Javy przegl darki. Przegl darka uruchamia tylkozewn trzn aplikacj , podobnie jak w przypadku innych programów, takich jakAdobe Acrobat lub Real Audio.

Aplikacjom podpisanym cyfrowo mo na nadawa dowolne prawa dost pu.Niepodpisane aplikacje dzia aj w piaskownicy (ang. sandbox), która nie zezwalana potencjalnie niebezpieczne operacje.

13.5.1. Wdra anie aplikacji Java Web StartPrzygotowywanie aplikacji do dostarczania za po rednictwem mechanizmu Java Web Startpolega na spakowaniu jej do jednego lub wi kszej liczby plików JAR. Nast pnie nale y utwo-rzy plik deskryptora w formacie JNLP (ang. Java Network Launch Protocol). Pliki umiesz-czamy na serwerze.

Dodatkowo serwer sieciowy musi raportowa typ MIME application/x-java-jnlp-filedla plików z rozszerzeniem .jnlp (typ MIME umo liwia przegl darkom podj cie decyzji, któryprogram pomocniczy uruchomi ). Szczegó owych informacji na ten temat nale y szukaw dokumentacji serwera.

Aby wypróbowa mechanizm Java Web Start, zainstaluj Tomcat dost pny na stronie http://jakarta.apache.org/tomcat. Jest to kontener na serwlety i strony JSP, ale

serwuje te strony internetowe. Jest wst pnie skonfigurowany do serwowania poprawnegotypu MIME dla plików JNLP. W dalszej cz ci tej sekcji zak adamy, e u ywany jestserwer Tomcat.

Poleć książkęKup książkę

Page 53: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 733

Wypróbujemy mechanizm Java Web Start na kalkulatorze z rozdzia u 12. Wykonaj nast -puj ce czynno ci:

1. Skompiluj program.javac -classpath .:/path/to/javaws.jar webstart/*.java

2. Utwórz plik JAR za pomoc poni szego polecenia:jar cvfe Calculator.jar webstart.Calculator webstart/*.class

3. Przygotuj plik rozruchowy Calculator.jnlp o nast puj cej tre ci:<?xml version="1.0" encoding="utf-8"?><jnlp spec="1.0+" codebase="http://localhost:8080/calculator/"href="Calculator.jnlp"> <information> <title>Przyk adowy kalkulator</title> <vendor>Cay S. Horstmann</vendor> <description>Kalkulator</description> <offline-allowed/> </information> <resources> <java version="1.6.0+"/> <jar href="Calculator.jar"/> </resources> <application-desc/></jnlp>

(Nale y pami ta , e numer wersji to 1.6.0, a nie 6.0).

Format pliku JNLP jest bardzo prosty. Jego pe na specyfikacja znajduje si na stroniehttp://www.oracle.com/technetwork/java/javase/javawebstart.

4. Utwórz katalog tomcat/webapps/calculator, z którego b dzie serwowanaaplikacja. W cie ce tej tomcat to katalog g ówny instalacji Tomcata. Utwórzpodkatalog tomcat/webapps/calculator/WEB-INF i umie w nim poni szy plikweb.xml:

<?xml version="1.0" encoding="utf-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"></web-app>

5. Umie pliki JAR i uruchomieniowy w katalogu tomcat/webapps/calculator.

6. Dodaj adres http://localhost:8080 do listy zaufanych miejsc w panelu kontrolnymJavy, post puj c zgodnie z instrukcjami zawartymi w podrozdziale 2.5, „Tworzeniei uruchamianie apletów”. Ewentualnie mo esz zamiast tego podpisa plik JARzgodnie z instrukcjami zamieszczonymi w sekcji 13.4.9, „Podpisywanie kodu”.

7. Uruchom serwer Tomcat, wykonuj c skrypt rozruchowy znajduj cy siw katalogu tomcat/bin.

8. Wpisz w przegl darce adres pliku JNLP. Na przyk ad w przypadku u ycia serweraTomcat nale y wpisa adres http://localhost:8080/calculator/Calculator.jnlp.Je eli przegl darka zosta a skonfigurowana pod k tem pracy z Java Web Start,powinno si pojawi okno uruchamiania Java Web Start (rysunek 13.7).

Poleć książkęKup książkę

Page 54: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

734 Java. Podstawy

Rysunek 13.7.Uruchamianieaplikacji JavaWeb Start

Je li przegl darka nie rozpoznaje plików JNLP, mo e zaproponowa powi zanie ichz jak aplikacj . W takim przypadku wybierz jdk/bin/javaws. W przeciwnym raziemusisz dowiedzie si , jak powi za typ MIME application/x-java-jnlp-filez aplikacj javaws. Ewentualnie mo esz jeszcze raz zainstalowa pakiet JDK,który powinien to zrobi automatycznie.

9. Chwil pó niej powinien si pojawi kalkulator z informacj , e jest to aplikacjaJavy (rysunek 13.8).

Rysunek 13.8.Kalkulator otwartyza po rednictwemJava Web Start

10. Kiedy nast pnym razem spróbujesz uzyska dost p do pliku JNLP, program b dziepobierany z pami ci podr cznej. Zawarto tej pami ci mo na obejrze za pomocpanelu kontrolnego w postaci wtyczki Javy (rysunek 13.9). W systemie Windowswtyczki tej nale y szuka w Panelu sterowania. W systemie Linux nale y wykonapolecenie jdk/jre/bin/ControlPanel.

Rysunek 13.9.Aplikacjew pami cipodr cznej

Poleć książkęKup książkę

Page 55: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 735

Aby nie uruchamia serwera podczas testowania konfiguracji JNLP, mo na tymcza- sowo nadpisa adres URL codebase w pliku JNLP za pomoc poni szego polecenia:

javaws -codebase file://katalogProgramu plikJNL

Na przyk ad w systemie Unix polecenie to mo na wyda w katalogu zawieraj cymplik JNLP:

javaws -codebase file://`pwd` Calculator.jnlp

Oczywi cie nie chcemy nak ania u ytkowników do uruchamiania przegl darki pami cipodr cznej za ka dym razem, kiedy chc uruchomi nasz aplikacj . Mo na sprawi , abyinstalator proponowa utworzenie skrótów w menu Start i na pulpicie. W tym celu nale ydoda poni szy kod do pliku JNLP:

<shortcut> <desktop/> <menu submenu="Akcesoria"/></shortcut>

Podczas pierwszego pobierania aplikacji zostanie wy wietlone ostrze enie o dodawaniu skrótów(rysunek 13.10).

Rysunek 13.10.Ostrze enieo integracji

Dodatkowo powinno si doda ikon dla skrótu i ekranu uruchomieniowego. Firma Sun zalecastosowanie ikon o rozmiarach 32×32 i 64×64 piksele. Pliki ikon nale y umie ci na serwerzerazem z plikami JAR i JNLP. Poni szy kod nale y doda do sekcji information pliku JNLP:

<icon href="calc_icon32.png" width="32" height="32" /><icon href="calc_icon64.png" width="64" height="64" />

Nale y pami ta , e ikony te nie s zwi zane z ikon aplikacji. Aby wstawi ikon dla aplikacji,nale y doda odr bny plik ikony do pliku JAR i wywo a metod IconImage na rzecz klasyramowej (zobacz listing 13.1).

13.5.2. API JNLPTechnologia Java Web Start ma t przewag nad apletami, e dla aplikacji dzia aj cych w pia-skownicy posiada API udost pniaj ce przydatne us ugi. Za jego pomoc aplikacje dzia aj cew piaskownicy maj dost p do zasobów lokalnych przy zachowaniu odpowiedniego poziomubezpiecze stwa. Istniej na przyk ad us ugi polegaj ce na wysy aniu i zapisywaniu plików.

Poleć książkęKup książkę

Page 56: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

736 Java. Podstawy

Aplikacja nie ma dost pu do systemu plików i nie mo e okre la nazw plików. W zamianwy wietlane jest okno dialogowe wyboru plików, w którym u ytkownik programu wybiera plik.Przed wy wietleniem tego okna pojawia si ostrze enie i u ytkownik musi wyrazi zgod nakontynuowanie (rysunek 13.11). Ponadto opisywane API nie daje w rzeczywisto ci programowidost pu do obiektu typu File. W szczególno ci aplikacja nie mo e sprawdzi lokalizacjipliku. W ten sposób programista zyskuje narz dzia do implementacji akcji otwierania i zapisy-wania plików, ale tak du o informacji systemowych, jak to tylko mo liwe, jest ukrytych przedniezaufanymi aplikacjami.

Rysunek 13.11.Ostrze enieJava Web Start

To API udost pnia nast puj ce us ugi:

wysy anie i zapisywanie plików,

dost p do schowka,

drukowanie,

pobieranie plików,

wy wietlanie dokumentów w domy lnej przegl darce,

zapisywanie i odczytywanie sta ych danych konfiguracyjnych,

pilnowanie, aby by uruchomiony tylko jeden egzemplarz programu.

Dost p do us ugi uzyskuje si za pomoc metody ServiceManager:FileSaveService service = (FileSaveService)ServiceManager.lookup("javax.jnlp.FileSaveService");

Powy sza instrukcja spowoduje wyj tek UnavailableServiceException, je li us uga jest nie-dost pna.

Aby móc kompilowa programy wykorzystuj ce API JNLP, nale y umie ci plik javaws.jar na cie ce klas. Plik ten znajduje si w podkatalogu jre/lib w kata-

logu JDK.

Omówimy najbardziej przydatne us ugi JNLP. Aby zapisa plik, trzeba poda cie k startowi rozszerzenia plików wy wietlanych w oknie dialogowym, dane do zapisania oraz sugerowannazw pliku. Na przyk ad:

service.saveFileDialog(".", new String[] { "txt" }, data, "calc.txt");

Poleć książkęKup książkę

Page 57: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 737

Dane musz by dostarczone w strumieniu InputStream, co nie zawsze jest atwe. W progra-mie na listingu 13.6 przyj to nast puj c strategi dzia ania:

1. Utworzenie strumienia ByteArrayOutputStream przechowuj cego bajty, które majby zapisane.

2. Utworzenie strumienia PrintStream wysy aj cego swoje dane do strumieniaByteArrayOutputStream.

3. Wydrukowanie informacji, które maj by zapisane, do strumienia PrintStream.

4. Utworzenie strumienia ByteArrayInputStream odczytuj cego zapisane bajty.

5. Przekazanie strumienia do metody saveFileDialog.

Wi cej na temat strumieni piszemy w rozdziale 1. drugiego tomu. Teraz wystarczy tylkopobie nie przejrze przyk adowy program.

Do odczytu danych z pliku s u y klasa FileOpenService. Jej metoda openFileDialog odbierasugerowan cie k pocz tkow i rozszerzenia plików wy wietlanych w oknie dialogowymi zwraca obiekt typu FileContents. Nast pnie mo na za pomoc metod getInputStreami getOutputStream odczyta i zapisa dane do pliku. Je li u ytkownik nie wybra pliku, metodaopenFileDialog zwraca warto null.

FileOpenService service = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService");FileContents contents = service.openFileDialog(".", new String[] { "txt" });if (contents != null){ InputStream in = contents.getInputStream(); . . .}

Pami tajmy, e aplikacja nie zna nazwy ani lokalizacji pliku. Aby otworzy okre lony plik,mo na u y klasy ExtendedService:

ExtendedService service = (ExtendedService)ServiceManager.lookup("javax.jnlp.ExtendedService");FileContents contents = service.openFile(new File("c:\\autoexec.bat"));if (contents != null){ OutputStream out = contents.getOutputStream(); . . .}

U ytkownik programu musi si zgodzi na dost p do tego pliku (rysunek 13.12).

Rysunek 13.12.Ostrze enieo dost piedo pliku

Poleć książkęKup książkę

Page 58: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

738 Java. Podstawy

Do wy wietlenia dokumentu w domy lnej przegl darce nale y u y interfejsu BasicService.Zauwa my, e niektóre systemy mog nie mie domy lnej przegl darki.

BasicService service = (BasicService) ServiceManager.lookup("javax.jnlp.BasicService");if (service.isWebBrowserSupported()) service.showDocument(url);else . . .

Podstawowy interfejs PersistenceService pozwala aplikacji zapisywa niewielkie ilo ci danychkonfiguracyjnych i odczytywa je po jej ponownym uruchomieniu. Mechanizm ten przypo-mina nieco pliki cookie HTTP. Ten sta y magazyn jako klucze wykorzystuje adresy URL.Adres URL nie musi prowadzi do istniej cego zasobu sieciowego. S one w tym przypadkuwykorzystywane jako wygodny sposób nazewnictwa hierarchicznego. Dla ka dego klucza URLaplikacja mo e zapisa dowolne dane binarne (rozmiar jednego bloku danych w magazyniemo e by ograniczony).

Odseparowanie od siebie poszczególnych aplikacji jest mo liwe dzi ki temu, e ka dy pro-gram mo e u ywa tylko takich kluczy, które zaczynaj si od okre lonego podstawowegoa cucha (zgodnie z informacjami w pliku JNLP). Je li na przyk ad aplikacja zostanie pobrana

ze strony http://myserver.com/apps, mo e u ywa tylko kluczy w formacie http://myserver.com/apps/subkey1/subkey2/…. Próby dost pu do innych kluczy zako cz si niepowodzeniem.

Aplikacja mo e sprawdzi podstaw swojego klucza URL za pomoc metody getCodeBasez klasy BasicService.

Do tworzenia kluczy s u y metoda create z interfejsu PersistenceService.URL url = new URL(codeBase, "mykey");service.create(url, maxSize);

Aby uzyska informacje zwi zane z okre lonym kluczem, nale y wywo a metod get. Zwracaona obiekt typu FileContents, za po rednictwem którego mo na odczytywa i zapisywa danekluczy. Na przyk ad:

FileContents contents = service.get(url);InputStream in = contents.getInputStream();OutputStream out = contents.getOutputStream(true); // true = nadpisz

Niestety nie ma dobrego sposobu na sprawdzenie, czy okre lony klucz ju istnieje, czy trzebago utworzy . Mo na wywo a metod get. Je li klucz nie istnieje, zostanie spowodowanywyj tek FileNotFoundException.

Aplikacje Java Web Start i aplety mog drukowa , wykorzystuj c normalne API dru- kowania. Pojawia si tylko okienko, w którym u ytkownik jest proszony o zezwole-

nie na dost p do drukarki. Wi cej informacji na temat API drukowania znajduje si w roz-dziale 7. drugiego tomu.

Program na listingu 13.6 jest prostym rozszerzeniem wcze niej utworzonego kalkulatora.Ma on wirtualn ta m , która rejestruje wszystkie obliczenia. Mo na zapisywa i adowahistori oblicze . Aplikacja pozwala na ustawienie tytu u ramki, co s u y demonstracji trwa-ego magazynu. Przy ponownym uruchomieniu aplikacja pobierze wybrany przez u ytkownika

tytu z trwa ego magazynu (rysunek 13.13).

Poleć książkęKup książkę

Page 59: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 739

Rysunek 13.13.AplikacjaWebStartCalculator

Listing 13.6. webstart/CalculatorFrame.java

package webstart;

import java.io.BufferedReader;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintStream;import java.net.MalformedURLException;import java.net.URL;

import javax.jnlp.BasicService;import javax.jnlp.FileContents;import javax.jnlp.FileOpenService;import javax.jnlp.FileSaveService;import javax.jnlp.PersistenceService;import javax.jnlp.ServiceManager;import javax.jnlp.UnavailableServiceException;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;

/** * Ramka z kalkulatorem i menu do adowania oraz zapisywania historii oblicze */public class CalculatorFrame extends JFrame{ private CalculatorPanel panel;

public CalculatorFrame() { setTitle();

Poleć książkęKup książkę

Page 60: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

740 Java. Podstawy

panel = new CalculatorPanel(); add(panel);

JMenu fileMenu = new JMenu("Plik"); JMenuBar menuBar = new JMenuBar(); menuBar.add(fileMenu); setJMenuBar(menuBar);

JMenuItem openItem = fileMenu.add("Otwórz"); openItem.addActionListener(event -> open()); JMenuItem saveItem = fileMenu.add("Zapisz"); saveItem.addActionListener(event -> save());

pack(); }

/** * Pobiera tytu z magazynu trwa ego lub prosi u ytkownika o podanie tytu u, je li * nie ma wcze niejszego wpisu. */ public void setTitle() { try { String title = null;

BasicService basic = (BasicService) ServiceManager.lookup("javax.jnlp.BasicService"); URL codeBase = basic.getCodeBase();

PersistenceService service = (PersistenceService) ServiceManager .lookup("javax.jnlp.PersistenceService"); URL key = new URL(codeBase, "title");

try { FileContents contents = service.get(key); InputStream in = contents.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); title = reader.readLine(); } catch (FileNotFoundException e) { title = JOptionPane.showInputDialog("Podaj tytu ramki:"); if (title == null) return;

service.create(key, 100); FileContents contents = service.get(key); OutputStream out = contents.getOutputStream(true); PrintStream printOut = new PrintStream(out); printOut.print(title); } setTitle(title); } catch (UnavailableServiceException e) { JOptionPane.showMessageDialog(this, e); }

Poleć książkęKup książkę

Page 61: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 741

}

/** * Otwiera plik historii i aktualizuje zawarto wy wietlacza. */ public void open() { try { FileOpenService service = (FileOpenService) ServiceManager .lookup("javax.jnlp.FileOpenService"); FileContents contents = service.openFileDialog(".", new String[] { "txt" });

JOptionPane.showMessageDialog(this, contents.getName()); if (contents != null) { InputStream in = contents.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line; while ((line = reader.readLine()) != null) { panel.append(line); panel.append("\n"); } } } catch (UnavailableServiceException e) { JOptionPane.showMessageDialog(this, e); } catch (IOException e) { JOptionPane.showMessageDialog(this, e); } }

/** * Zapisuje histori kalkulatora w pliku. */ public void save() { try { ByteArrayOutputStream out = new ByteArrayOutputStream(); PrintStream printOut = new PrintStream(out); printOut.print(panel.getText()); InputStream data = new ByteArrayInputStream(out.toByteArray()); FileSaveService service = (FileSaveService) ServiceManager .lookup("javax.jnlp.FileSaveService"); service.saveFileDialog(".", new String[] { "txt" }, data, "calc.txt"); } catch (UnavailableServiceException e) { JOptionPane.showMessageDialog(this, e); } catch (IOException e) {

Poleć książkęKup książkę

Page 62: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

742 Java. Podstawy

JOptionPane.showMessageDialog(this, e); } }}

javax.jnlp.ServiceManager

static String[] getServiceNames()

Zwraca nazwy wszystkich dost pnych us ug.

static Object lookup(string name)

Zwraca us ug o podanej nazwie.

javax.jnlp.BasicService

URL getCodeBase()

Zwraca katalog zawieraj cy kod aplikacji.

boolean isWebBrowserSupported()

Zwraca warto true, je li rodowisko Web Start mo e uruchomi przegl dark .

boolean showDocument(URL url)

Podejmuje prób pokazania danego adresu URL w przegl darce. Zwraca wartotrue, je li danie ko czy si powodzeniem.

javax.jnlp.FileContents

InputStream getInputStream()

Zwraca strumie wej ciowy do odczytu zawarto ci pliku.

OutputStream getOutputStream(boolean overwrite)

Zwraca strumie wyj ciowy do zapisu do pliku. Je li parametr overwritema warto true, aktualna tre pliku jest nadpisywana.

String getName()

Zwraca nazw pliku (nie pe n cie k katalogow ).

boolean canRead()

boolean canWrite()

Zwraca warto true, je li dany plik nadaje si do odczytu lub zapisu.

javax.jnlp.FileOpenService

FileContents openFileDialog(String pathHint, String[] extensions)

FileContents[] openMultiFileDialog(String pathHint, String[] extensions)

Wy wietla ostrze enie dla u ytkownika i okno wyboru pliku. Zwraca deskryptorytre ci pliku lub plików wybranych przez u ytkownika b d warto null,je li u ytkownik nie wybra adnego pliku.

Poleć książkęKup książkę

Page 63: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Rozdzia 13. Przygotowywanie apletów i aplikacji do u ytku 743

javax.jnlp.FileSaveService

FileContents saveFileDialog(String pathHint, String[] extensions,InputStream data,String nameHint)

FileContents saveAsFileDialog(String pathHint, String[] extensions,FileContents data)

Wy wietla ostrze enie dla u ytkownika i okno wyboru pliku. Zapisuje danei zwraca deskryptory tre ci pliku lub plików wybranych przez u ytkownikab d warto null, je li u ytkownik nie wybra adnego pliku.

javax.jnlp.PersistenceService

long create(URL key, long maxsize)

Zapisuje dany klucz w pami ci trwa ej. Zwraca maksymalny rozmiar przyznawanyprzez pami trwa .

void delete(URL key)

Usuwa dany klucz.

String[] getNames(URL url)

Zwraca wzgl dne nazwy wszystkich kluczy, które zaczynaj si od danegoadresu URL.

FileContents get(URL key)

Tworzy deskryptor tre ci, za po rednictwem którego mo na modyfikowa danezwi zane z danym kluczem. Je li dla danego klucza nie istnieje aden wpis,zg aszany jest wyj tek FileNotFoundException.

Na tym ko czymy opis technik przygotowywania aplikacji w Javie do u ytku. W ostatnim roz-dziale zajmiemy si bardzo wa nym tematem wspó bie no ci.

Poleć książkęKup książkę

Page 64: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

744 Java. Podstawy

Poleć książkęKup książkę

Page 65: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

SkorowidzA

absolute positioning, 643abstrakcja, 209accelerators, 613access modifier, 56accessor method, 139accessory component, 673action map, 550adapter class, 543adnotacje, 392adres URL, 726, 738agregacja, 133akceleratory, 612, 613akcesorium, 673akcja bariery, 829akcje, 546aktualizacje, 37aktywno komponentu, 548aktywowanie elementów menu, 614algorytm, 130, 469, 474

quick sort, 120, 471sortowanie, 470, 471tasowanie, 470tworzenie, 478wyszukiwanie binarne, 473znajdowanie liczb pierwszych, 483

analizadanych ze ledzenia stosu, 345funkcjonalno ci klasy, 246obiektów w czasie dzia ania programu, 251

animowane gify, 725anonimowe klasy wewn trzne, 302, 313API, Application Programming Interface, 13, 17API JNLP, 735API Preferences, 706

dost p do tablicy, 707dost p do w z a drzewa, 707repozytorium, 706zapis danych, 707

aplety, 28, 693, 714dost p do JavaScriptu, 720implementacja, 715init(), 718JApplet, 715komunikacja mi dzy apletami, 720, 727obrazy, 725otwieranie strony, 728parametry, 720pasek stanu, 727pliki audio, 725przegl darka, 714, 716Swing, 715rodowisko dzia ania, 726

tworzenie, 48, 715uruchamianie, 48, 716viewer, 716wy wietlanie elementów w przegl darce, 727

aplikacje graficzne, 46architektura, 25

model-widok-kontroler, 570argumenty, 59ascender, 519ascent, 519asercje, 350

dokumentacja za o e , 353sprawdzanie parametrów, 352stosowanie, 352warunek wst pny, 353w czanie, 352wy czanie, 352

asocjacja, 133atrybuty znacznika applet, 719autoboxing, 31, 235, 236automatyczne

opakowywanie, 236usuwanie nieu ytków, 22

autowrapping, 236AWT, Abstract Window Toolkit, 488

Poleć książkęKup książkę

Page 66: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

846 Java. Podstawy

Bbariery, 829

akcja, 829cykliczne, 829z amanie, 829

base class, 194baseline, 519bazowy katalog drzewa pakietu, 182bezpiecze stwo, 24, 34biblioteka

Java2D, 506refleksyjna, 242

bitowaalternatywa, 73koniunkcja, 73negacja, 73

blocking queue, 796blok, 57, 97

inicjuj cy, 170synchronizowany, 781try, 245try-catch, 335try-finally, 341, 342

blokady, 771jawne, 778odczyt-zapis, 793wewn trzne, 778wielowej ciowe, 771

blokowanie po stronie klienta, 782b dy, 24, 328

dane wej ciowe, 328debugowanie, 372kod ród owy, 328ograniczenia fizyczne, 328pomy ka o jeden, 470przekroczenie zakresu liczby, 60urz dzenia, 328

BMP, Basic Multilingual Plane, 64boolean, 64border layout manager, 574bridge method, 390bucket, 441budowanie a cuchów wyj tków, 339

Ccall by name, 159call by reference, 159call by value, 159callback, 278camel case, 56casting, 71, 206certyfikaty, 731checkbox, 587checked exception, 243, 330

child class, 194chwytanie typu wieloznacznego, 408cia o metody, 58class field, 154class loader, 320, 352client-side locking, 782code, 718code planes, 64code point, 64code units, 64combo box, 597content pane, 501corejava, 698coupling, 133covariant return types, 204cykliczne bariery, 829czcionki, 517

Font, 518interlinia, 519linia bazowa, 519logiczne nazwy, 517nazwa, 517odwzorowanie nazw logicznych, 518PostScript type 1, 518rodzina, 517styl, 518TrueType, 518wyd u enie, 519wysoko , 519

czytanie danych, 88

Ddane

XML, 32ze ledzenia stosu, 345

deadlock, 774, 788debuger, 373debugowanie, 372deep copying, 284default package, 177definicja

klasy, 142klasy uogólnionej, 382sta ej klasowej, 67zmiennej, 66

deklaracjawyj tków kontrolowanych, 331zmiennej tablicowej, 115zmiennych, 65

dekrementacja, 72delegacja, 258

zdarze , 531demony, 762derived class, 194descender, 519descent, 519

Poleć książkęKup książkę

Page 67: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Skorowidz 847

device context, 502dezaktywacja elementu, 561

menu, 614diagramy klas, 134document-modal dialog, 660dodawanie

akcji, 826klasy do pakietu, 177

dokumentacja, 40API, 81, 84za o e , 353

dokumenty JSR, 379dost p

chroniony, 214do apletu z poziomu JavaScriptu, 720do elementów listy tablicowej, 231do plików, 96do pól, 149do zasobów lokalnych, 735

double, 61doubly linked list, 432drukowanie, 30drzewa, 444

czerwono-czarne, 444du e liczby, 60dymki, 620dynamic binding, 199dynamiczno , 27dziedziczenie, 131, 133, 193, 261, 380

dost p chroniony, 214hierarchia, 201interfejs, 272klasy, 495klasy abstrakcyjne, 209klasy finalne, 205metody finalne, 205metody przes aniaj ce, 195nadklasy, 194Object, 215podklasy, 194polimorfizm, 199, 201porównywanie obiektów, 217przes anianie metod, 197rzutowanie, 206super, 196typy uogólnione, 402wielokrotne, 274

dzienniki, 355, 364filtry, 363formatery, 364Handler, 360konfiguracja mened era dzienników, 358lokalizacja, 359poziomy wa no ci komunikatów, 356rotacja plików, 361ledzenie przep ywu wykonywania, 357

techniki zapisu, 356zapis, 355

Eedycja kodu ród owego, 45egzemplarz klasy, 131elementy menu, 606eliminowanie wywo a funkcji, 27epoka, 138etykiety, 582event dispatch thread, 493, 795event listener, 530event object, 530event procedure, 529event sources, 530exit code, 58explicit parameter, 148external padding, 627

Ffactory method, 156false, 64field accessor, 149figury

2W, 505geometryczne, 506

file chooser, 671filtr plików, 670filtry, 363float, 61flow layout manager, 572format JNLP, 732formatery, 364formatowanie danych wyj ciowych, 91frame, 492funkcje

czysto wirtualne, 210matematyczne, 68

Ggarbage collecting, 22Garbage Collector, 458GBC, 628generic class, 381, 382generic programming, 380generic types, 31generowanie dokumentacji javadoc, 189generyczne listy tablicowe, 228

dost p do elementów, 231glass pane, 501g boka kopia, 284GPL, 33graficzny interfejs u ytkownika, GUI, 30, 487, 751grafika, 487

czcionki, 517kolory, 513obrazy, 525

Poleć książkęKup książkę

Page 68: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

848 Java. Podstawy

graphics context, 502group layout manager, 624grupy przycisków radiowych, 590GTK, 490GUI, 30, 487, 751

Hhash code, 220, 441hash table, 221, 602heap, 119, 450height, 497hermetyzacja, 131, 149hierarchia

dziedziczenia, 201interfejsów, 272wyj tków, 329, 349zdarze w bibliotece AWT, 560

historia Javy, 29HSB, 679HTML, 31

IIDE, 43identyfikacja klas, 132IEEE 754, 62IFC, Internet Foundation Classes, 488ikony w elementach menu, 609immutable class, 153implementacja

apletów, 715interfejsu, 265, 267

implicit parameter, 148import, 89, 175

klas, 175statyczny, 177

informacje o typachczasu wykonywania, 242generycznych w maszynie wirtualnej, 412

inheritance, 193inheritance chain, 201inheritance hierarchy, 201inicjalizacja

pól, 167pól warto ciami domy lnymi, 166tablic, 117zmiennych, 66

inkrementacja, 72inline method, 149inlining, 27, 206inner class, 265, 302input dialog, 649input maps, 549instalacja

dokumentacji, 40Java Development Kit, 36

instrukcjaswitch, 108goto, 110

instrukcjesteruj ce, 97warunkowe, 98

interfejs, 214, 258, 266, 428AdjustmentListener, 562Action, 546, 607, 613ActionListener, 278, 313, 531, 546AppletContext, 720, 726–728BasicService, 738, 742BlockingDeque, 801BlockingQueue, 800ButtonModel, 571, 591, 593Callable, 810ChangeListener, 601Cloneable, 284Callable, 810, 814Collection, 422, 426–429, 436Comparable, 266, 386, 450Comparator, 281, 301Condition, 777, 779, 792Delayed, 800Deque, 448, 449Enumerable, 419Enumeration, 424, 480ExecutorService, 816, 819, 821FileFilter, 671, 678Filter, 372FocusListener, 562Formattable, 92Future, 810–814, 839GenericArrayType, 413, 417InvocationHandler, 320, 324ItemListener, 562ItemSelectable, 591Iterable, 117, 423Iterator, 303, 424Iterator<E>, 428KeyListener, 562LayoutManager, 644, 647ListIterator, 433, 436ListIterator<E>, 439Lock, 769, 772, 777, 792Map, 429, 453MenuListener, 615MouseListener, 554, 556, 562MouseMotionListener, 554–556, 562MouseWheelListener, 562, 563NavigableSet, 430, 445, 448, 468NavigableMap, 430, 469ParametrizedType, 413, 417PersistenceService, 738, 743PersistentService, 738PropertyChangeListener, 674Queue, 420, 448RandomAccess, 429

Poleć książkęKup książkę

Page 69: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Skorowidz 849

Runnable, 755, 810, 816, 832ScheduledExecutorService, 820Set, 430Shape, 506SortedMap, 430, 454–457, 469SortedSet, 430, 447Thread.UncaughtExceptionHandler, 763TypeVariable, 413, 417UncaughtExceptionHandler, 763, 764WildcardType, 413, 417WindowFocusListener, 562, 563WindowListener, 542, 545, 562WindowStateListener, 545, 563

interfejsydefinicja, 266dziedziczenie, 272hierarchia, 272funkcyjne, 292implementacja, 265, 267klasy abstrakcyjne, 273metody, 273nas uchu, 530programowania aplikacji, 13sprz enie zwrotne, 278zmienne, 272znacznikowe, 284

interlinia, 519internal padding, 627internet, 28interpreter, 26interrupted state, 755invocation handler, 320iteratory, 423

przesuwanie, 424

JJ2, 36Java, 13, 30, 41Java Archive, 694Java Community Process, 33Java EE, 37Java ME, 37Java Project, 44Java SDK, 36Java SE 6, 37Java Web Start, 693, 732javac, 41, 42, 145javadoc, 184, 189

generowanie dokumentacji, 189komentarze, 186–188streszczenie, 185wstawianie komentarzy, 185znaczniki dokumentacyjne, 185

javap, 769JavaScript, 34javaws, 735

jawna inicjalizacja pól, 167jconsole, 376jcontrol, 717JDK, Java Development Kit, 13, 25, 35, 36jednostki kodowe, 64, 80j zyk

C++, 23HTML, 31J++, 28Java, 13, 21JavaScript, 34UML, 134

j zyki interpretowane, 33JFC, Java Foundation Classes, 488JNLP, Java Network Launch Protocol, 732–736JRE, Java Runtime Environment, 36, 37JSR, Java Specification Requests, 379just-in-time compilation, 25JVM, 696

Kkalendarz, 138katalog bazowy drzewa pakietu, 182keyboard focus, 548klasa, Patrz tak e plik, 56, 131, 566

AdjustmentEvent, 561AccessibleObject, 254ActionEvent, 530, 537, 561AbstractAction, 547, 550, 607AbstractButton, 593, 609AbstractCollection, 426, 436AbstractList, 479Applet, 715, 718, 728AppletContext, 720Array, 256ArrayBlockingQueue, 799ArrayDeque, 430, 449ArrayDequeue, 421ArrayIndexOutOfBounds, 116ArrayIndexOutOfBoundsException, 330, 831ArrayList, 116, 229–234, 380, 424, 809ArrayList<T>, 228ArrayStoreException, 402Arrays, 120, 122, 468AssertionError, 351AWTEvent, 560BadCastException, 411BigDecimal, 113, 115BigInteger, 113, 114BitSet, 419, 482, 483BitVector, 482BooleanHolder, 237BorderFactory, 593, 595BorderLayout, 575, 576, 644BoxLayout, 623BrokenBarrierException, 829

Poleć książkęKup książkę

Page 70: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

850 Java. Podstawy

klasaButtonGroup, 590, 591, 593, 610ByteArrayInputStream, 737ByteArrayOutputStream, 737CancellationException, 839ChangeEvent, 601Class, 242, 320, 411, 698Class<T>, 411, 412, 416ClassCastException, 207, 218, 466ClassLoader, 354ButtonFrame, 534CloneNotSupportedException, 285Collections, 464, 470–474

max(), 474reverseOrder(), 471unmodifiableList(), 464

Color, 514, 516ColorAction, 533, 547Component, 499, 516, 573, 582ConcurrentHashMap, 802, 810ConcurrentLinkedQueue, 802, 803ConcurrentModificationException, 435, 802ConcurrentSkipListMap, 802–804ConcurrentSkipListSet, 802, 804Console, 89, 90ConsoleHandler, 360, 364, 371Constructor, 244, 246, 250, 252Constructor<T>, 412Container, 536, 573, 574CopyOnWriteArrayList, 808CopyOnWriteArraySet, 808CountDownLatch, 828Cursor, 554CyclicBarrier, 828, 829Date, 93, 135, 150DebugGraphics, 684DefaultButtonModel, 571, 572DelayQueue, 797, 800Deque, 448Dictionary, 392Dimension, 497Double, 62Ellipse2D, 506–509Ellipse2D.Double, 513EmptyStackException, 350Enum<T>, 241EnumMap, 430, 459, 461EnumSet, 430, 459, 461EOFException, 333Error, 330EventHandler, 538EventObject, 530, 538, 560EventQueue, 835Exception, 245, 330Exchanger, 828, 830ExecutorCompletionService, 821, 822Executors, 815, 819, 820ExtendedService, 737

Field, 246, 250, 252, 255, 258File, 97FileContents, 737, 742FileFilter, 671FileHandler, 360, 361, 364FileInputStream, 331, 701FileNameExtensionFilter, 678FileNotFoundException, 331, 333, 738FileOpenService, 737, 742FileSaveService, 743FileView, 672, 678FlowLayout, 574FocusAdapter, 562FocusEvent, 561Font, 518, 522FontMetrics, 524FontRenderContext, 519Formatter, 364, 372Frame, 492, 499, 546FutureTask, 811, 815Graphics, 502, 516, 524Graphics2D, 506, 516–524GraphicsDevice, 498GraphicsEnvironment, 517, 690GregorianCalendar, 137, 140, 142GridBagConstraints, 625–628, 633GridLayout, 576, 579GroupLayout, 638, 641–643HashMap, 430, 451, 454, 809HashSet, 424, 430, 440, 442

dodawanie elementów, 445iterator, 442

Hashtable, 419, 479, 480, 809Handler, 360–362, 370GridBagLayout, 623, 638, 644

anchor, 627, 633bottom, 627dope nienie, 627dope nienie wewn trzne, 627dope nienie zewn trzne, 627fill, 627GBC, 628GridBagConstraints, 628gridheight, 626, 627gridwidth, 626, 627gridx, 626, 627ipadx, 627klasa pomocnicza, 628left, 627ograniczenia, 626right, 627top, 627weight, 626

IdentityHashMap, 431, 460IllegalAccessException, 252IllegalArgumentException, 351IllegalStateException, 425Integer, 237, 238

Poleć książkęKup książkę

Page 71: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Skorowidz 851

InputEvent, 559InterruptedException, 747, 752–756, 811IntHolder, 237IOException, 333, 336ItemEvent, 561JApplet, 715, 721

wspó rz dne, 506, 508elipsa, 508Ellipse2D, 506–509figury geometryczne, 506Line2D, 506programowanie, 506Shape, 506rysowanie, 506rysowanie figur, 510Rectangle2D, 506–509

JButton, 531–535, 548, 570JCheckBox, 588, 589JCheckBoxMenuItem, 610JColorChooser, 649, 679, 683JComboBox, 478, 597, 600JComponent, 502, 549, 582, 620JDialog, 659–663JFileChooser, 669, 677JFrame, 492, 495JLabel, 582JMenu, 607, 608JMenuBar, 606JMenuItem, 609, 612JPanel, 505, 576JOptionPane, 280, 649, 651, 659, 664JPasswordField, 584JPopupMenu, 612JRadioButton, 590, 592JRadioButtonMenuItem, 610JScrollPane, 585, 587JSlider, 600JTextArea, 580, 584, 586JTextComponent, 580JTextField, 570, 580, 582JUnit, 373JToolBar, 619, 622KeyAdapter, 562KeyEvent, 561KeyStroke, 548, 552, 613Line2D, 506Line2D.Double, 513LineMetrics, 520, 523LineBorder, 595, 597LinkedBlockingDeque, 797, 800LinkedBlockingQueue, 797LinkedHashMap, 431, 458–460LinkedHashSet, 430, 458, 460LinkedList, 421, 430, 433, 436, 440LinkedList<E>, 440List, 440, 473List<E>, 438Lock, 769, 772, 777

Logger, 368LookAndFeelInfo, 541Math, 68, 154Method, 246, 250, 259, 416Modifier, 251MouseAdapter, 562MouseEvent, 559, 561, 612MouseHandler, 556MouseMotionAdapter, 562MouseMotionHandler, 556MouseWheelEvent, 561NoSuchElementException, 428, 439, 469NullPointerException, 330, 350, 353NumberFormat, 238NumberFormatException, 349Object, 131, 215, 222, 444, 781PaintEvent, 561PasswordChooser, 663, 664Point, 509Point2D, 509Point2D.Double, 508, 513Point2D.Float, 508Preferences, 706, 711PrintStream, 224, 737Proxy, 320, 324PriorityBlockingQueue, 797, 800PriorityQueue, 430, 451Properties, 481, 701–704PrintWriter, 95, 97PriorityQueue, 451Properties, 481Proxy, 324Queue, 448Random, 174Rectangle, 509Rectangle2D, 506–509Rectangle2D.Double, 507, 512Rectangle2D.Float, 507, 513RectangularShape, 509, 512ReentrantLock, 769, 772, 793ReentrantReadWriteLock, 793Robot, 686, 690RuntimeException, 330, 347, 349Runnable, 758Scanner, 88–90, 97Semaphore, 828SequentialGroup, 643ServiceManager, 742ServletException, 339SocketHandler, 360SoftBevelBorder, 595, 596SpringLayout, 624Stack, 419, 482StackTraceElement, 347StreamHandler, 361, 363StrictMath, 70String, 76–81StringBuilder, 85, 86

Poleć książkęKup książkę

Page 72: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

852 Java. Podstawy

klasaSwingUtilities, 668SwingWorker, 835, 839, 840System, 705SystemColor, 515Thread, 754, 757, 763

currentThread(), 755sleep(), 747start(), 754

ThreadDeath, 760ThreadGroup, 763, 764ThreadPoolExecutor, 816, 820Throwable, 245, 329, 339, 349Time, 93, 94TimeoutException, 811Timer, 278, 280Toolkit, 281, 497, 500, 559TreeMap, 430, 451, 454TreeSet, 430, 444–447, 450UIManager, 541UnsupportedOperationException, 462–466Update, 36Vector, 229, 419, 809WeakHashMap, 431, 457, 460WeakReference, 458Window, 499WindowAdapter, 543, 562WindowEvent, 530, 542, 561

klasyabstrakcyjne, 209, 273

interfejs, 273zmienne obiektowe, 211

adaptacyjne, 542, 543agregacja, 133anonimowe, 302, 313bazowe, 194definiowanie, 142diagramy, 134dziedziczenie, 131, 133, 194egzemplarz, 131finalne, 205generyczne, 228identyfikacja, 132implementacja interfejsu, 265komentarze, 186konstruktory, 135, 147macierzyste, 194metody, 131metody prywatne, 152metody statyczne, 155nadklasy, 194nazwy, 56parametryzowane, 381plik ród owy, 183pochodne, 194podklasy, 194pola statyczne, 153pomocnicze, 628

po rednicz ce, 319potomne, 194predefiniowane, 134projektowanie, 190proxy

invocation handler, 320adowanie klas, 320

publiczne, 175relacje mi dzy klasami, 133rozszerzanie, 131sta e, 67sta e pola, 152statyczne, 316cie ka, 181

uogólnione, 381, 382definicja, 382tworzenie egzemplarza, 383

wewn trzne, 265, 302bezpiecze stwo, 309dost p do stanu obiektu, 303dost p do zmiennych, 310metody, 302referencja do klasy zewn trznej, 306referencja do obiektu zewn trznego, 304sk adnia, 303this, 307zastosowanie, 307

wyliczeniowe, 240zagnie d one, 302zale no , 133

klasyfikacja wyj tków, 329klawiatura, 548klawisze, 548klikni cie przycisku, 531klonowanie obiektów, 282klucz URL, 738kod

bajtowy, 27mieszaj cy, 220, 441uogólniony, 387wyj cia, 58ród owy, 56

kodowanieUnicode, 62UTF-16, 64

kolejka, 420, 448blokuj ca, 795, 796

LinkedBlockingDeque, 797LinkedBlockingQueue, 797metody, 796PriorityBlockingQueue, 797

dost pu, 647dwukierunkowa, 448priorytetowa, 450

kolejno bajtów, 26kolekcje, 419

algorytmy, 469ArrayDeque, 430ArrayList, 430, 809

Poleć książkęKup książkę

Page 73: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Skorowidz 853

bezpiecze stwo w tkowe, 802BitSet, 482, 483Collection, 429ConcurrentHashMap, 802ConcurrentLinkedQueue, 802ConcurrentSkipListMap, 802ConcurrentSkipListSet, 802CopyOnWriteArrayList, 808CopyOnWriteArraySet, 808Deque, 448dost p swobodny, 429Enumeration, 480EnumMap, 430, 459EnumSet, 430, 459HashMap, 430, 451, 809HashSet, 424, 430, 440, 442Hashtable, 479, 809IdentityHashMap, 431, 460interfejsy, 419klasy, 430kolejka, 448kolejka priorytetowa, 450kolejno odwiedzania elementów, 424konwersje, 477LinkedHashMap, 431, 458LinkedHashSet, 430, 458LinkedList, 430List, 440listy cykliczne, 422listy powi zane, 431listy tablicowe, 440mapy, 451mapy w asno ci, 481NavigableMap, 430NavigableSet, 430obiekty opakowuj ce, 462ograniczone, 422operacje opcjonalne, 466operacje zbiorcze, 476PriorityQueue, 430, 451Properties, 481Queue, 420, 448s abo spójne iteratory, 802SortedMap, 430SortedSet, 430sortowanie, 470Stack, 482starsze kolekcje bezpieczne w tkowo, 809stos, 482tablice kopiowane przy zapisie, 808tasowanie, 470TreeMap, 430, 451TreeSet, 430, 444uporz dkowane, 429, 433Vector, 809warstwa interfejsów, 420warstwa klas konkretnych, 420WeakHashMap, 431, 457

widoki kontrolowane, 465widoki niemodyfikowalne, 464widoki przedzia owe, 463widoki synchronizowane, 465wyliczenia, 480wyszukiwanie binarne, 473zbiory bitów, 482

kolizja, 441nazw, 175

kolory, 513Color, 514definiowanie, 514system kolorów, 515t o, 514wybór, 679

komentarze, 59dokumentacyjne, 184

komórki, 441komunikaty okna dialogowego

ERROR_MESSAGE, 650INFORMATION_MESSAGE, 650PLAIN_MESSAGE, 650QUESTION_MESSAGE, 650WARNING_MESSAGE, 650

kompilacja w czasie rzeczywistym, 25kompilator, 42komponenty, 502, 565, 573

dymki, 620etykiety, 582JButton, 571JCheckBox, 588JCheckBoxMenuItem, 610JColorChooser, 649, 679JComboBox, 597JFileChooser, 669JLabel, 582JMenuBar, 606JMenuItem, 612JOptionPane, 649JPasswordField, 584JPopupMenu, 612JRadioButton, 590JRadioButtonMenuItem, 610JScrollPane, 585JSlider, 600JTextArea, 580, 584JTextField, 580JToolBar, 619listy rozwijalne, 597menu, 606menu podr czne, 611obszary tekstowe, 584panele przewijane, 585paski narz dzi, 618pola hase , 584pola tekstowe, 580pola wyboru, 587prze czniki, 590

Poleć książkęKup książkę

Page 74: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

854 Java. Podstawy

komponentysuwaki, 600wybór opcji, 587zarz dzanie rozk adem, 572

komputer wieloprocesorowy, 784komunikacja mi dzy apletami, 720, 727komunikaty o b dach, 46konfiguracja

mened era dzienników, 358projektu, 44

konkatenacja, 76konstruktory, 135, 147

domy lny, 167przeci anie, 167wirtualne, 244

kontekstgraficzny, 502urz dzenia, 502

kontener, 505, 573kontrola

dost pu, 303grup zada , 821nazw, 303

kontroler, 568konwersja

a cucha na liczb , 237pomi dzy kolekcjami a tablicami, 477typów numerycznych, 70

ko czenie dzia ania programu, 58kopiowanie

g bokie, 284obiektów, 282p ytkie, 283tablicy, 118

kowariantne typy zwracane, 204, 391kó ko myszy, 561kube ki, 441kursory, 555

Llayered pane, 501layout manager, 565leading, 519licencja GPL, 33liczby

ca kowite, 26, 60zmiennoprzecinkowe, 61

linia pisma, 519linked list, 432listener interface, 530listener object, 279listy

cykliczne, 421dwukierunkowe, 432powi zane, 421, 431, 432

dodawanie elementów, 433, 434ListIterator, 433

metody get i set, 437ogniwa, 432usuwanie elementów, 432

rozwijalne, 597tablicowe, 234, 440

load factor, 442local inner class, 302logging proxy, 373logic_error, 331logiczne nazwy czcionek, 517lokalizacja, 359lokalne klasy wewn trzne, 310

adowanieklas, 320us ug, 712

a cuchy, 26, 76d ugo , 80dziedziczenia, 201identyczno , 78jednostki kodowe, 80konkatenacja, 76niezmienialno , 77pod a cuchy, 76porównywanie, 78sk adanie, 85String, 81StringBuilder, 85wspó dzielenie, 77wspó rz dne kodowe znaków, 80wyj tków, 339

Mmanifest, 695mapa, 451

akcji, 550wej cia, 549

mapy w asno ci, 481, 701marker interface, 284maska BUTTON3_DOWN_MASK, 554maski bitowe, 553maszyna wirtualna Javy, 376mechanizm adowania klas, 320mened er zabezpiecze , 729menu, 606

akceleratory, 612, 613akcje, 607aktywowanie elementów, 614dezaktywowanie elementów, 614elementy, 606, 607ikony w elementach, 609mnemoniki, 612pasek, 606

Poleć książkęKup książkę

Page 75: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Skorowidz 855

podmenu, 606pola wyboru, 610prze czniki, 610separatory, 607skróty klawiszowe, 613tworzenie, 606

menu podr czne, 611obs uga, 611tworzenie, 611

metadane, 31metoda

accept(), 678actionPerformed(), 279, 311, 546, 607add(), 113–115, 427, 622, 796addGroup(), 642addActionListener(), 530, 588, 607, 660addAll(), 427, 439, 475, 477addChoosableFileFilter(), 671, 677addComponent(), 642addContainerGap(), 643addFirst(), 440, 449addGap(), 642addHandler(), 370addItem(), 598, 600addLast(), 440, 449addLayoutComponent(), 644, 647addPreferredGap(), 643addPropertyChangeListener(), 546addSeparator(), 607, 608, 619, 622addWindowListener(), 543adjustmentValueChanged(), 562allOf(), 461and(), 483andNot(), 483append(), 87, 587appendCodePoint(), 87ArrayAlg.getMiddle(), 385await(), 774, 775awaitUninterruptibly(), 793await(), 774–793, 829asList(), 462, 468brighter(), 514binarySearch(), 122, 321, 473BorderFactory.createEtchedBorder(), 594BorderFactory.createCompoundBorder(), 594BorderFactory.createTitledBorder(), 594beep(), 281call(), 814cancel(), 811, 815canRead(), 742canWrite(), 742cast(), 411ceiling(), 448charAt(), 80, 81checkedCollection(), 465, 467checkedList(), 467checkedMap(), 467checkedSet(), 467

checkedSortedMap(), 467checkedSortedSet(), 467Class.forName(), 243, 245clear(), 427, 483clearAssertionStatus(), 354clone(), 283, 284, 285, 324close(), 370codePointAt(), 80, 82codePointCount(), 80, 83compareTo(), 82, 114, 240, 266–270Component.show(), 494config(), 368contains(), 427containsAll(), 427containsKey(), 453containsValue(), 453copy(), 475copyArea(), 525, 527copyOf(), 118, 122create(), 743currentThread(), 755, 757createSequentialGroup(), 641createScreenCapture(), 691createTitledBorder(), 596createBevelBorder(), 595createCompoundBorder(), 596createCustomCursor(), 559createDialog(), 683createEmptyBorder(), 595createEtchedBorder(), 595createFont(), 518createLineBorder(), 595createLoweredBevelBorder(), 595createMatteBorder(), 595createParallelGroup(), 641darker(), 514delay(), 691delete(), 88, 743deriveFont(), 518, 523descendingIterator(), 448destroy(), 718drawImage(), 525, 527disjoint(), 476divide(), 114, 115doInBackground(), 839, 840Double.isNaN(), 62draw(), 506, 513drawString(), 503, 513, 524element(), 449, 796Employee.clone(), 391ensureCapacity(), 230entering(), 369equals(), 78, 123, 215–221, 430equalsIgnoreCase(), 78, 82execute(), 841exiting(), 369exportSubtree(), 712exportNode(), 712

Poleć książkęKup książkę

Page 76: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

856 Java. Podstawy

metodafill(), 123, 475, 513, 516finalize(), 174fine(), 368finer(), 368finest(), 369first(), 447flipDone(), 785floor(), 448flush(), 370focusGained(), 562focusLost(), 562Font.createFont(), 518format(), 364, 372formatMessage(), 364, 372forName(), 243, 245frequency(), 475get(), 231, 429, 707, 814getActionCommand(), 537, 593getActionCommands(), 561getActionMap(), 553getActualTypeArguments(), 417getAllItems(), 478getAllStackTraces(), 345getAncestorOfClass(), 668getApplet(), 720, 729getAppletContext(), 726, 728getAppletInfo(), 725getApplets(), 727, 728getAscent(), 523getAudioClip(), 726, 727getAutoCreateContainerGaps(), 642getAutoCreateGaps(), 642getAvailableFontFamilyNames(), 517getBackground(), 516getBoolean(), 707, 711getBounds(), 417getByteArray(), 707, 711getCause(), 346getCenter(), 509getCenterX(), 509, 512getCenterY(), 509, 512getClass(), 216, 227, 242, 324getClassName(), 347, 541getClickCount(), 559getCodeBase(), 725, 738, 742getColor(), 516, 683getColumns(), 582getComponentPopupMenu(), 612getConstructor(), 411, 412getConstructors(), 246, 250getContentPane(), 501, 504getDay(), 139getDeclardeFields(), 255getDeclaredConstructor(), 411, 412getDeclaredConstructors(), 246, 250getDeclaredField(), 255getDeclaredFields(), 246, 250–252

getDeclaredMethods(), 246, 250getDeclaringClass(), 250getDefaultScreenDevice(), 690getDefaultToolkit(), 281, 497, 500getDefaultUncaughtExceptionHandler(), 763getDelay(), 797, 800getDescent(), 523getDescription(), 672, 678getDocumentBase(), 725, 726getDouble(), 707, 711getEnumConstants(), 411getExceptionTypes(), 250getExtendedState(), 500getFamily(), 523getField(), 255getFields(), 246, 250, 255getFileName(), 347getFilter(), 370getFintName(), 523getFirst(), 440, 449getFloat(), 707, 711getFont(), 524, 582getFontMetrics(), 521, 524getFontRenderContext(), 519–524getForeground(), 516getFormatter(), 370getGenericComponentType(), 417getGenericInterfaces(), 416getGenericParameterTypes(), 416getGenericReturnType(), 416getGenericSuperclass(), 416getHandlers(), 370getHead(), 364, 372getHeight(), 509, 512, 520, 524getHonorsVisibility(), 641getIcon(), 583, 672, 678getIconImage(), 499getImage(), 726, 727getInheritsPopupMenu(), 612getInputMap(), 549, 553getInputStream(), 737, 742getInstalledLookAndFeels(), 541getInt(), 707, 711getKey(), 457getKeyStroke(), 548, 550, 552getLargestPoolSize(), 820getLast(), 440, 449getLeading(), 523getLength(), 256, 258getLevel(), 370, 371getLineMetrics(), 520, 523getLineNumber(), 347getLocalGraphicsEnvironment(), 690getLogger(), 368getLoggerName(), 371getLong(), 707, 711getLowerBounds(), 417getMaxX(), 512

Poleć książkęKup książkę

Page 77: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Skorowidz 857

getMaxY(), 512getMessage(), 335, 371getMethod(), 259, 260getMethodName(), 347getMethods(), 246, 250getMillis(), 372getMinX(), 512getMinY(), 512getModifiers(), 246, 250getModifiersEx(), 554, 559getModifiersExText(), 559getMonth(), 139getName(), 228, 417, 523, 672, 742getNames(), 743getNewState(), 545getOldState(), 545getOutputStream(), 737, 742getOwnerType(), 417getPaint(), 516getParameter(), 721, 725getParameterInfo(), 725getParameters(), 371getParameterTypes(), 250getParent(), 370getPassword(), 584getPath(), 670getPoint(), 559getPredefinedCursor(), 554getProperties(), 702, 705getProperty(), 481, 702, 705getProxyClass(), 324getRawType(), 417getResource(), 698, 700getResourceAsStream(), 698, 700getResourceBundle(), 371getResourceBundleName(), 371getReturnType(), 250getRootPane(), 665, 668getScreenDevices(), 690getScreenSize(), 497, 500getSelectedFile(), 670, 677getSelectedFiles(), 670, 677getSelectedItem(), 598, 600getSelectedObjects(), 591getSelection(), 591, 593getSequenceNumber(), 372getServiceNames(), 742getSource(), 561getSourceClassName(), 371getSourceMethodName(), 372getStackTrace(), 345, 347getState(), 760, 841getStringBounds(), 519–523getSuperClass(), 228, 412getTail(), 364, 372getText(), 580, 581getThreadID(), 372getThrown(), 371

getTime(), 206getTitle(), 496, 499getTotalBalance(), 772getTypeDescription(), 672, 678getTypeParameters(), 416getUncaughtExceptionHandler(), 763getUpperBounds(), 417getUseParentHandlers(), 370getValue(), 457, 546, 547, 552getWidth(), 507–509, 512, 520getX(), 512, 559getY(), 512, 520, 559getYear(), 139hashCode(), 220, 324, 441, 444hasMoreElements(), 424, 481hasNext(), 90, 423, 428, 435hasNextDouble(), 90hasNextInt(), 90hasPrevious(), 434, 439headMap(), 469headSet(), 468higher(), 448identityHashCode(), 462importPreferences(), 712indexOf(), 82, 166, 439indexOfSubList(), 475info(), 368init(), 718, 720initCause(), 346insert(), 87, 608insertSeparator(), 608insertItemAt(), 598, 600Integer.parseInt(), 237interrupt(), 755, 757interrupted(), 756, 757intValue(), 238invoke(), 259, 261, 324invokeAll(), 821invokeAndWait(), 832, 835invokeAny(), 821isAbstract(), 251invokeLater(), 832, 835, 842isAccessible(), 255isCancelled(), 815, 816isDefaultButton(), 668isDispatchThread(), 835isDone(), 784, 811, 815isEditable(), 580, 600isEmpty(), 427isEnabled(), 546, 552isFinal(), 246, 251isInterface(), 251isInterrupted(), 755–757isLocationByPlatform(), 497, 499isLoggable(), 363, 372isNaN(), 62isNative(), 251isNativeMethod(), 347

Poleć książkęKup książkę

Page 78: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

858 Java. Podstawy

metodaisPrivate(), 246, 251isProtected(), 251isProxyClass(), 325isPopupTrigger(), 612isPublic(), 246, 251isResizable(), 499isSelected(), 590, 591, 611isStatic(), 251isStrict(), 251isSynchronized(), 251isTraversable(), 672, 679isUndecorated(), 500isVisible(), 499iterator(), 422, 426isVolatile(), 251itemStateChanged(), 562isWebBrowserSupported(), 742join(), 760JMenu.remove(), 614JFrame.add(), 501last(), 447lastIndexOf(), 83, 439lastIndexOfSubList(), 475layoutContainer(), 644, 647length(), 80, 83, 483linkSize(), 641listIterator(), 438load(), 482, 705lock(), 772, 791lockInterruptibly(), 792log(), 369Logger.global.info(), 355Logger.global.setLevel(), 355logp(), 357, 369logrb(), 369lookup(), 742lower(), 448main(), 56, 57, 156Math.round(), 71Math.sqrt(), 260, 351max(), 474, 475menuCanceled(), 615menuDeselected(), 615menuSelected(), 615min(), 475minimumLayoutSize(), 644, 647mod(), 114Modifier.toString(), 246mouseDragged(), 555, 563mouseClicked(), 553, 563mouseEntered(), 556, 563mouseExited(), 556, 563MouseListener(), 554mouseMove(), 691mouseMoved(), 555, 563mousePress(), 691mousePressed(), 553, 554, 563

mouseRelease(), 691mouseReleased(), 553, 563move(), 746multiply(), 113–115nCopies(), 463, 467newCachedThreadPool(), 815, 819newCondition(), 777newFixedThreadPool(), 815, 819newInstance(), 244, 256, 258, 411newProxyInstance(), 320, 324newScheduledThreadPool(), 816, 820newSingleThreadExecutor(), 816, 819newSingleThreadScheduledExecutor(), 816, 820next(), 88, 423–425, 428nextDouble(), 89, 90nextElement(), 424, 481nextIndex(), 437, 439nextLine(), 88, 90nextInt(), 88, 90, 174node(), 711noneOf(), 461notify(), 778, 781, 783notifyAll(), 778–783Object.clone(), 285, 391of(), 461offer(), 448, 796, 801offerFirst(), 449, 801offerLast(), 449, 801offsetByCodePoints(), 80, 82openFileDialog(), 737, 742openMultiFileDialog(), 742ordinal(), 241or(), 483paint(), 747paintComponent(), 333, 502–506, 650, 795parse(), 238parseInt(), 237, 238, 721peek(), 449, 482, 796peekFirst(), 449peekLast(), 449play(), 726pop(), 482pow(), 69Preferences.systemNodeForPackage(), 707Preferences.systemRoot(), 707Preferences.userNodeForPackage(), 707Preferences.userRoot(), 707poll(), 448, 796, 801, 822pollFirst(), 448, 449, 801pollLast(), 448, 449, 801preferredLayoutSize(), 644, 647previous(), 434, 437, 439print(), 59, 91previousIndex(), 437, 439printf(), 238println(), 323printStack(), 245printStackTrace(), 246, 374

Poleć książkęKup książkę

Page 79: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Skorowidz 859

process(), 839, 841publish(), 370, 841putLong(), 711putValue(), 546, 552, 609, 620push(), 482put(), 429, 453, 707, 796putAll(), 453putBoolean(), 711putByteArray(), 711putDouble(), 711putFirst(), 801putFloat(), 711putInt(), 707, 711putLast(), 801range(), 461readLine(), 90readLock(), 793readPassword(), 90removeEldestEntry(), 461remove(), 423–429, 608, 796removeAll(), 427removeAllItems(), 600run(), 752, 754, 755replace(), 83replaceAll(), 475repozytorium Preferences, 706resetChoosableFileFilters(), 678resetChoosableFilters(), 671resize(), 718repaint(), 502, 505, 747resume(), 761retainAll(), 427, 476revalidate(), 581, 582reverse(), 475reverseOrder(), 471rotate(), 475removeFirst(), 440, 449removeHandler(), 370removeItem(), 598, 600removeItemAt(), 598, 600removeLast(), 440, 449removeLayoutComponent(), 644, 647removePropertyChangeListener(), 546saveAsFileDialog(), 743saveFileDialog(), 736, 737schedule(), 820scheduleAtFixedRate(), 820scheduleWithFixedDelay(), 820setAcceptAllFileFilterUsed(), 671, 678setAccessible(), 252, 254setAccelerator(), 613, 614setActionCommand(), 593setAction(), 608set(), 231, 255, 435, 483setAccessory(), 678setAnchor(), 629setAutoCreateContainerGaps(), 642setAutoCreateGaps(), 642

setBackground(), 514–516setBorder(), 594, 597setBounds(), 494, 496, 499setCharAt(), 87setClassAssertionStatus(), 354setColor(), 516, 683setColumns(), 581, 585, 587setComponentPopupMenu(), 611, 612setCurrentDirectory(), 669, 677setCursor(), 560setDaemon(), 762setDebugGraphicsOptions(), 684setDefaultAssertionStatus(), 354setDefaultButton(), 665, 668setDefaultCloseOperation(), 494, 718setDefaultUncaughtExceptionHandler(), 763setDisplayedMnemonicIndex(), 613, 614setDone(), 784setEchoChar(), 584setEditable(), 580, 600setEnabled(), 546, 552, 614setExtendedState(), 498, 500setFileFilter(), 677setFileSelectionMode(), 670, 677setFileView(), 672, 678setFill(), 629setFilter(), 363, 370setFont(), 524, 582setForeground(), 516setFormatter(), 370setFrameFromCenter(), 510setFrameFromDiagonal(), 510setHonorsVisibility(), 641setHorizontalGroup(), 634, 641setHorizontalTextPosition(), 609setIcon(), 583setIconImage(), 494, 500setInheritsPopupMenu(), 611, 612setInverted(), 605setJMenuBar(), 607, 609setLabelTable(), 602, 606setLayout(), 574, 576setLevel(), 370setLineWrap(), 585, 587setLocation(), 494, 496, 499setLocationByPlatform(), 496–499setLookAndFeel(), 539, 541setMajorTickSpacing(), 601, 606setMinorTickSpacing(), 601, 606setMnemonic(), 613, 614setMultiSelectionEnabled(), 670, 677setPackageAssertionStatus(), 354setPaint(), 513–516setPaintLabels(), 602, 606setPaintTicks(), 601, 605setPaintTrack(), 605, 606setParent(), 370setPriority(), 761

Poleć książkęKup książkę

Page 80: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

860 Java. Podstawy

metodasetRect(), 508setResizable(), 495, 499setRows(), 585, 587setSelected(), 588, 590, 610setSelectedFile(), 670, 677setSelectedFiles(), 677setSelectionEnd(), 842setSelectionStart(), 842setSize(), 497, 499, 718setSnapToTicks(), 601, 606setSource(), 538setTabSize(), 587setText(), 580–583, 663, 832setTime(), 206setTitle(), 495–499, 718setToolTipText(), 620, 622setUncaughtExceptionHandler(), 763setUndecorated(), 494, 500setUseParentHandlers(), 370setValue(), 457setVerticalGroup(), 641setVisible(), 494, 663, 718, 841setWrapStyleWord(), 587severe(), 368store(), 482, 701, 705shutdown(), 820signal(), 775–790signalAll(), 774–789singleton(), 467singletonList(), 463singletonMap(), 463size(), 230, 426, 437sleep(), 751, 832sort(), 120, 269, 470, 472start(), 280, 718, 754stop(), 281, 718, 760, 794show(), 494, 612showConfirmDialog(), 651, 657showDialog(), 677, 683showDocument(), 728, 742showInputDialog(), 650, 658showInternalConfirmDialog(), 657showInternalInputDialog(), 658showInternalMessageDialog(), 656showInternalOptionDialog(), 657showMessageDialog(), 280, 650, 656showOpenDialog(), 669, 677showOptionDialog(), 650, 657showSaveDialog(), 670, 677showStatus(), 727shuffle(), 472start(), 718stop(), 718String.format(), 93subSet(), 468submit(), 819, 822subMap(), 469

subList(), 463, 468substring(), 76, 79, 83subtract(), 114, 115super.clone(), 284suspend(), 760, 794swap(), 475SwingUtilities.updateComponentTreeUI(), 539synchronizedCollection(), 465, 467synchronizedList(), 467synchronizedMap(), 465, 467synchronizedSet(), 467synchronizedSortedMap(), 467synchronizedSortedSet(), 467System.exit(), 58, 494System.getProperty(), 702System.out.print(), 91System.out.println(), 88System.runFinalizersOnExit(), 174systemNodeForPackage(), 711systemRoot(), 707, 711tailMap(), 469tailSet(), 468take(), 796, 801, 822takeFirst(), 801takeLast(), 801text(), 90Thread.dumpStack(), 374Thread.getAllStackTraces(), 345throwing(), 369toArray(), 427, 428toBack(), 499toFront(), 495, 499toLowerCase(), 83toString(), 88, 122, 222, 238–241, 347toUpperCase(), 83transfer(), 772trim(), 83, 581trimToSize(), 230, 231tryLock(), 792uncaughtException(), 763unlock(), 770, 772unmodifiableCollection(), 465unmodifiableList(), 464–466unmodifiableMap(), 467unmodifiableSet(), 465unmodifiableSortedMap(), 467unmodifiableSortedSet(), 466updateComponentTreeUI(), 539userNodeForPackage(), 711userRoot(), 707, 711validate(), 582, 842valueOf(), 114, 238, 241void(), 755warning(), 368windowActivated(), 542, 545, 563wait(), 778–783, 790windowClosed(), 542, 545, 563windowClosing(), 542, 545, 563

Poleć książkęKup książkę

Page 81: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Skorowidz 861

windowDeactivated(), 542, 563WindowDeactivated(), 545windowDeiconified(), 542, 545, 563WindowEvent(), 545windowGainedFocus(), 563windowIconified(), 542, 545, 563windowLostFocus(), 563windowOpened(), 542, 545, 563windowStateChanged(), 545, 563writeLock(), 794xor(), 483yield(), 762

metody, 57, 131abstrakcyjne, 209cia o, 58domy lne, 275generyczne, 384, 425dost p do pól, 149fabrykuj ce, 156finalne, 205komentarze, 186parametry, 59, 159parametryzowane, 384pomostowe, 390prywatne, 152przeci anie, 165rodzime, 155statyczne, 69, 155, 274sygnatura, 166, 204synchronized, 778udost pniaj ce, 139uogólnione, 384, 425wstawiane, 149wnioskowanie o typie, 385

MIME, 732mnemoniki, 612modal dialog box, 648modalne okna dialogowe, 648modalno , 659model, 568, 569modeless dialog box, 648modifier keys, 554modu aduj cy klasy, 352modyfikacja parametru obiektowego, 161modyfikatory dost pu, 56, 214monitor, 783motywy, 491mouseWheelMoved, 563multiple inheritance, 274multithreaded, 745mutable class, 153MVC, Model-View-Controller, 565–568mysz, 553, 561

kursory, 555

Nnadklasy, 194nadtypy typów wieloznacznych, 405NaN, 62, 68narz dzia wiersza polece , 41nawiasy, 74

klamrowe, 57nazwy, 56

klas, 56, 192metod, 192parametrów, 168rodziny czcionek, 517zmiennych, 65

NetBeans, 36New Project, 43niemodalne okna dialogowe, 648niemodyfikowalne widoki, 464niezale no od architektury, 25niszczenie obiektów, 174notacja wielb dzia, 56null, 137, 166

Oobiekt, 131

Handler, 362System.out, 58zdarze , 530

obiektowo , 23obiekty, 23, 60

autoboxing, 235Handler, 360hermetyzacja, 131klonowanie, 282konstruktory, 135, 147kopiowanie, 282metody, 131, 139, 152nas uchuj ce, 279niszczenie, 174opakowuj ce, 462polimorfizm, 199porównywanie, 215po rednicz ce, 320sk adowe, 131, 150stan, 131to samo , 131tworzenie, 135, 165warunków, 772w a ciwo ci, 131zachowanie, 131

obliczenia, 68obramowanie, 593obrazy, 525

wczytywanie, 525wy wietlanie, 525

Poleć książkęKup książkę

Page 82: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

862 Java. Podstawy

obs ugab dów, 328ramek, 498wyj tków, 243, 327, 348zdarze , 279, 529, 562

ActionEvent, 530, 561ActionListener, 546actionPerformed(), 531AdjustmentEvent, 561akcje, 546AWTEvent, 560EventObject, 530, 560FocusEvent, 561hierarchia zdarze , 560interfejs nas uchu, 530ItemEvent, 561KeyEvent, 561klasy adaptacyjne, 542, 543klikni cie przycisku, 531MouseEvent, 561MouseMotionListener, 554MouseWheelEvent, 561mysz, 553obiekt zdarze , 530procedura obs ugi, 529s uchacz, 530WindowEvent, 530, 561ród o, 530

obszarysurogatów, 64tekstowe, 584

odbieranie danych wej ciowych, 88odczyt

danych, 88z pliku, 95

odmierzanie czasu, 278, 791odpakowywanie, 236odradzane metody, 139odwzorowanie nazw czcionek, 518ogniwa, 432ograniczenia zmiennych typowych, 385okna, 542okno dialogowe, 648

akcesorium, 673dane wej ciowe, 649JColorChooser, 649, 679JFileChooser, 669JOptionPane, 649klawisz wyzwolenia, 665komunikaty, 650modalne, 648, 660modalno dokumentu, 660modalno zestawu narz dzi, 660niemodalne, 648opcje, 649panel g ówny, 665potwierdzenia, 651przycisk domy lny, 665

przyciski, 650ramka nadrz dn , 659tworzenie, 659wybór kolorów, 679wybór plików, 669wymiana danych, 663wy wietlanie, 664

OOP, Object Oriented Programming, 130opakowywanie, 236opcje okna dialogowego

CANCEL_OPTION, 651CLOSED_OPTION, 651DEFAULT_OPTION, 650OK_CANCEL_OPTION, 650, 651OK_OPTION, 651NO_OPTION, 651YES_NO_CANCEL_OPTION, 650YES_NO_OPTION, 650YES_OPTION, 651

operacjeopcjonalne, 466zbiorcze, 476

operatornew, 88, 135, 758nierówno ci, 73równo ci, 73trójargumentowy, 73

operatory, 67arytmetyczne, 67, 72bitowe, 73dekrementacja, 72inkrementacja, 72instanceof, 208, 272logiczne, 73nawiasy, 74priorytety, 74przesuni cie bitowe, 74przyrostkowe, 72relacyjne, 73skracanie, 72sprawdzania zakresu, 119

opisanie prostok ta, 508optional operations, 466os ona obiektów, 235o rodek certyfikacji, 730overloading resolution, 166

Ppakiet

CORBA, 237JDK, 36java.lang.reflect, 246, 413javax.swing, 278, 493java.util.concurrent, 759, 770, 797java.util.EventObject, 530java.util.logging.config.class, 359java.util.logging.config.file, 358

Poleć książkęKup książkę

Page 83: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Skorowidz 863

java.util.logging.LogManager, 359java.util.logging.manager, 359Swing, 488

pakiety, 174dodawanie klasy, 177domy lny, 177import klas, 175komentarze, 188lokalizacyjne, 359piecz towanie, 700zasi g, 180

panel przewijany, 585parametry, 59, 159

aplety, 720jawne, 148nazwy, 168niejawne, 148typowe, 380wiersza polece , 119

parent class, 194pasek menu, 606paski narz dzi, 618p tle, 100

break, 110continue, 112do while, 103for, 104for each, 30, 116liczba iteracji, 104natychmiastowe przej cie do nag ówka, 112przerywanie dzia ania, 110while, 100, 103

piaskownica, 729, 732piecz towanie pakietów, 700planowanie wykonywania, 820platforma programistyczna, 21plik

AboutDialog.java, 662ActionFrame.java, 551AnonymousInnerClassTest.java, 314Ball.java, 749BallComponent.java, 750Bank.java, 779BlockingQueueTest.java, 797Bounce.java, 747BounceThread.java, 752ButtonFrame.java, 534ButtonPanel.java, 655CalculatorFrame.java, 739Chart.java, 723CircleLayout.java, 644CircleLayoutFrame.java, 646CloneTest.java, 286ColorChooserPanel.java, 681DataExchangeFrame.java, 665DialogFrame.java, 661DrawTest.java, 511Employee.java, 270, 287

EmployeeSortTest.java, 269EventTracer.java, 685FileIconView.java, 676FirstSample.java, 59FontFrame.java, 629, 638FontTest.java, 521forkJoinTest.java, 823FutureTest.java, 812GBC.java, 631GenericReflectionTest.java, 414ImagePreviewer.java, 675ImageTest.java, 525ImageViewer.java, 47ImageViewerFrame.java, 674InnerClassTest.java, 305LambdaTest.java, 291LoggingImageViewer.java, 365LotteryOdds.java, 107MenuFrame.java, 616MouseComponent.java, 556MouseFrame.java, 556NotHelloWorld.java, 503OptionDialogFrame.java, 652PairTest1.java, 383PairTest2.java, 387PairTest3.java, 409PasswordChooser.java, 666PlafFrame.java, 539PreferencesTest.java, 708PropertiesTest.java, 702ProxyTest.java, 321ResourceTest.java, 699Retirement.java, 101Retirement2.java, 103RoadApplet.html, 49RoadApplet.java, 52RobotTest.java, 688Sieve.cpp, 485Sieve.java, 484SimpleFrameTest.java, 492SizedFrameTest.java, 497StackTraceTest.java, 346StaticInnerClassTest.java, 318SwingThreadTest.java, 832SwingWorkerTest.java, 836ThreadPoolTest.java, 817TimerTest.java, 279ToolBarFrame.java, 621

plikiaudio

AIFF, 725AU, 725MIDI, 725WAV, 725

graficzneGIF, 725JPEG, 725PNG, 725

Poleć książkęKup książkę

Page 84: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

864 Java. Podstawy

plikijava, 56JAR, 181, 694

manifest, 695piecz towanie pakietów, 700sekcja g ówna, 695wykonywalne pliki, 696zasoby, 697zmiana zawarto ci pliku manifestu, 695

jnlp, 732kod ród owy, 56odczyt, 95tekstowe, 96zapis, 95ZIP, 694ród owe, 40

pluggable look and feel, 570p ytka kopia, 283pobieranie

danych, 88pakietu JDK, 36

podklasy, 194pod a cuchy, 76podmenu, 606podpisywanie kodu, 730podwójna precyzja, 61pola

hase , 584klasowe, 154kombi, 597statyczne, 153tekstowe, 580ulotne, 783wyboru, 587

polimorfizm, 199, 201, 263pop-up menu, 611pop-up trigger, 611porównywanie

a cuchów, 78obiektów, 215

powiadamianie o zdarzeniach, 532powi zana tablica mieszaj ca, 458powi zania mi dzy klasami, 133powtórne generowanie wyj tków, 339pozycjonowanie

bezwzgl dne, 643ramki, 494

preferencje u ytkownika, 701API Preferences, 706mapy w asno ci, 701

priorytetyoperatorów, 74, 75w tków, 761

procedura obs ugib dów, 329nieprzechwyconych wyj tków, 762zdarze , 529

procesy, 746

program, 56java, 42OptionDialogTest, 652Swing graphics debugger, 684

programowaniegeneryczne, 379proceduralne, 130uogólnione, 380

dziedziczenie, 402egzemplarze zmiennych typowych, 395klasy uogólnione, 381, 382konflikty, 401maszyna wirtualna, 387metody uogólnione, 384ograniczenia, 393parametry typowe, 380refleksja, 411sprawdzanie typów, 393statyczny kontekst klas uogólnionych, 398tablice typów uogólnionych, 394translacja metod uogólnionych, 389translacja wyra e generycznych, 389typy proste, 393typy surowe, 388typy wieloznaczne, 404wyj tki, 398zastosowanie, 381

zachowawcze, 350zorientowane obiektowo, 130

programyrefleksyjne, 242wielow tkowe, 745

projektowanieklas, 190zorientowane obiektowo, 23

property map, 481, 701prostok t, 507, 508prywatne pola, 150przechwytywanie wyj tków, 244, 335, 337przeci anie, 165, 166

konstruktorów, 167przegl darka apletów, 716przekazywanie

przez warto , 162wyj tków, 350

prze czniki, 590powiadamianie o zdarzeniach, 590

przeno no , 26przepe nienie stosu, 24przep yw sterowania, 97

instrukcji do-while, 105instrukcji switch, 109instrukcji while, 102p tli for, 105

przerywaniedzia ania p tli, 110przep ywu sterowania, 110w tków, 755

Poleć książkęKup książkę

Page 85: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Skorowidz 865

przestrze numeracyjna, 64przesuni cie bitowe, 74przesuwanie iteratora, 424przetwarzanie

danych wej ciowych, 89wyra e lambda, 298

przyciski, 531, 571, 623przywileje klasowe, 151publiczne

metody akcesora, 150metody mutatora, 150pola danych, 150

puchni cie kodu szablonów, 388pule w tków, 815

kontrola grup zada , 821planowanie wykonywania, 820tworzenie, 815

Qqueue, 420quick sort, 120, 471

Rrace condition, 764radio button, 565, 587ragged arrays, 127ramki, 492

pozycjonowanie, 494rozmiar, 497warstwy, 501w asno ci, 496wy wietlanie, 494

referencjado obiektu, 136do konstruktora, 295do metody, 293

reflection, 193refleksja, 193, 242, 264

analiza funkcjonalno ci klasy, 246analiza obiektów, 251Class, 242Constructor, 246Field, 246, 258generyczny kod tablicowy, 255informacje o typach generycznych, 412klasy, 242Method, 246nazwy pól, 251parametry Class<T>, 412typy pól, 251typy uogólnione, 411wska niki do metod, 258

rejestruj cy obiekt po redni, 373

relacje mi dzy klasami, 133, 262resource boundle, 359RGB, 680rodzina czcionek, 517root pane, 501rozk ad

brzegowy, 574grupowy, 634siatkowy, 576spr ynowy, 624

rozmiarekranu, 497ramki, 497

rozstrzyganie przeci ania, 166, 203rozszerzanie klas, 131runtime_error, 331rysowanie, 488, 502

figury 2W, 505rzutowanie, 71, 206, 208

Ssandbox, 729, 732

dost p do zasobów lokalnych, 735scroll pane, 585SDK, 36SE, 36security manager, 729semafory, 827sieciowo , 24sk ad tekstów, 520sk adanie a cuchów, 78, 85sk adnia

Javy, 23wyra e lambda, 289

sk adowe, 131, 150slider, 587s abe referencje, 458s abo spójne iteratory, 802s owo kluczowe, 843

abstract, 209assert, 351break, 97, 108, 110case, 108catch, 245, 335class, 56, 143const, 67continue, 112default, 108else, 99enum, 75extends, 194, 272final, 67, 152, 205finally, 340, 342if, 98implements, 267import, 89, 175

Poleć książkęKup książkę

Page 86: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

866 Java. Podstawy

s owo kluczoweinstanceof, 208, 284interface, 266new, 88, 115, 135package, 177, 181packages, 174private, 146, 152protected, 185, 214public, 56, 146, 180, 214static, 154–156, 171static binding, 203static final, 67static void, 58strictfp, 68super, 196, 197switch, 108synchronized, 769, 777this, 148, 155, 307throw, 333throws, 96, 331try, 245, 335view, 462void, 58volatile, 784while, 100, 103

s owa zarezerwowane, 65s owniki klawiaturowe, 549s uchacz zdarze , 530sortowanie, 470

quick sort, 471tablica, 120

specyfikacja wyj tku, 332specyfikator formatu, 91sprawdzanie

parametrów, 352zakresu, 119

spring layout, 624sprz enie zwrotne, 278stack trace, 345sta e, 67

pola klasy, 152statyczne, 154

sta e interfejsu Action, 547ACCELERATOR_KEY, 547ACTION_COMMAND_KEY, 547DEFAULT, 547NAME, 547LONG_DESCRIPTION, 547MNEMONIC_KEY, 547SMALL_ICON, 547SHORT_DESCRIPTION, 547

sta e klasowe, 67sta e a cuchowe, 79sta e matematyczne, 68stan obiektu, 131stany w tków, 758statyczne

funkcje sk adowe, 58klasy wewn trzne, 316

sterta, 119, 450STL, Standard Template Library, 420stos, 482stosowanie

kilku plików ród owych, 145wyj tków, 348

strona HTML, 714struktury danych, 420

kolejka, 448kolejka priorytetowa, 450listy powi zane, 431listy tablicowe, 440mapy, 451sterta, 450tablice mieszaj ce, 441zbiór, 442

strumienie, 88styl Metal, 538subclass, 194substitution principle, 202superclass, 194supplementary characters, 64surrogates area, 64suwaki, 600

podzia ka, 601Swing, 488

akceleratory, 613aplety, 715czcionki, 517dodawanie komponentów, 575dymki, 620etykiety, 582figury 2W, 505ikony, 494kolejka dost pu, 647kolory, 513komponenty, 502, 565, 573konfiguracja komponentów, 493kontener, 505, 573listy rozwijalne, 597mapa wej cia, 549menu, 606menu podr czne, 611motywy, 491nazwy klas, 492niestandardowi zarz dcy rozk adu, 643obramowanie, 593obs uga zdarze , 502obszary tekstowe, 584okna dialogowe, 648panel przewijany, 585paski narz dzi, 618pola hase , 584pola tekstowe, 580pola wyboru, 587po o enie ramki, 494pozycjonowanie bezwzgl dne, 643pozycjonowanie ramki, 494

Poleć książkęKup książkę

Page 87: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Skorowidz 867

prze czniki, 590przyciski, 571, 623ramki, 492rozk ad brzegowy, 574rozk ad siatkowy, 576rozmiar ekranu, 497rozmiar ramki, 497rysowanie, 502style, 490suwaki, 600tekst pasku tytu u, 495tre , 568tryb pe noekranowy, 498uruchamianie czasoch onnych zada , 831warstwy ramki, 501w tek dystrybucji zdarze , 493w tki, 830wprowadzanie tekstu, 580wybór opcji, 587wygl d, 568wysy anie zdarze , 493wy wietlanie

informacji w komponencie, 500ramki, 494tekstu, 503

zachowanie, 568zamykanie ramki aplikacji, 494zarz dzanie rozk adem, 572, 623zasada jednego w tku, 832, 841zmiana stylu, 538

sygnatura metody, 166, 204symbole zast pcze znaków specjalnych, 63synchronizacja w tków, 764synchronizatory, 827

bariery, 829CountDownLatch, 828CyclicBarrier, 828, 829Exchanger, 828, 830semafory, 827Semaphore, 828SynchronousQueue, 828zatrzask z licznikiem, 828

systemkolorów, 515usuwania nieu ytków, 458

System.err, 360, 374System.in, 88System.out, 96, 374

cie kadost pu, 38klas, 181

cis a kontrola typów, 268ledzenie

przep ywu wykonywania, 357stosu, 245, 345

rednik, 65rodowisko

dzia ania apletu, 726programistyczne, 35

Ttabela metod, 204tablice, 115

anonimowe, 117deklaracja, 115inicjalizacja, 117Iterable, 117kopiowane przy zapisie, 808kopiowanie, 118liczba elementów, 116tablice mieszaj ce, 221, 441

kolizja, 441komórki, 441kube ki, 441reorganizacja, 442wspó czynnik zape nienia, 442

numerowanie elementów, 116postrz pione, 126przetwarzanie, 116rozmiar 0, 118sortowanie, 120tworzenie, 115wielowymiarowe, 123

tagging interface, 284tasowanie, 470technologia Matisse, 634template code bloat, 388testowanie blokad, 791this, 148, 155, 197, 307thread, 745thread of control, 745toolbar, 618toolkit-modal dialog, 660tooltips, 620to samo obiektu, 131translacja

metod uogólnionych, 389wyra e generycznych, 389

traversal order, 647tre , 568trigger key, 665try, 245, 335tryb pe noekranowy, 498try-finally, 341, 342tworzenie

akceleratory, 613algorytm, 478aplety, 48egzemplarz klasy, 131egzemplarz typu uogólnionego, 383klasy wyj tków, 334

Poleć książkęKup książkę

Page 88: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

868 Java. Podstawy

tworzenieklucz URL, 738konstruktory, 147menu, 606metody uogólnione, 384obiekty, 135, 136, 165obiekty po rednicz ce, 320okna dialogowe, 659pliki JAR, 694pule w tków, 815ramki, 492tablice, 115tablice anonimowe, 117tablice postrz pione, 127w tki, 754zegar, 278

type parameters, 380typy

interfejsowe, 422MIME, 732sparametryzowane, 31, 379surowe, 229, 388uogólnione

refleksja, 411wieloznaczne, 381, 404

bez ogranicze , 408chwytanie, 408nadtypy, 405ograniczenia nadtypów, 405

wyliczeniowe, 75typy danych, 60

boolean, 64ca kowite, 60char, 62int, 26long int, 26liczby ca kowite, 60liczby zmiennoprzecinkowe, 61a cuchy, 76

numeryczne, 61rzutowanie, 71

U

ukrywanie danych, 131UML, Unified Modeling Language, 134

powi zania mi dzy klasami, 134unchecked exception, 330Unicode, 62, 76Update, 36updates, 37uruchamianie

apletów, 48, 716aplikacji, 57aplikacji bezpo rednio z internetu, 732

aplikacji graficznej, 46czasoch onnych zada , 831w tku, 752

us ugi, 712ustawianie cie ki klas, 184usuwanie b dów, 372UTC, 138UTF-16, 64

Vvarargs, 238, 357

Wwarto ci logiczne, 64warunki, 772w tek

dystrybucji zdarze , 493, 795sterowania, 745

w tki, 746, 747bariery, 829BLOCKED, 759blok synchronizowany, 781blokada, 771blokady odczytu-zapisu, 793blokowanie po stronie klienta, 782Callable, 810Condition, 777demony, 762Executors, 815Future, 810, 811kolejka blokuj ca, 795kolekcje bezpieczne w tkowo, 802Lock, 769, 772, 777monitor, 783NEW, 758nieprzechwycone, 762oczekuj ce, 774odmierzanie czasu, 791pola ulotne, 783priorytety, 761przerywanie, 755pule, 815ReentrantLock, 772, 793ReentrantReadWriteLock, 793run(), 754RUNNABLE, 758semafory, 827signal(), 775signalAll(), 774, 775stany, 758status przerwania, 755stop(), 794suspend(), 794Swing, 830

Poleć książkęKup książkę

Page 89: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Skorowidz 869

synchronizacja, 764synchronizatory, 827synchronized, 777tablice kopiowane przy zapisie, 808TERMINATED, 758testowanie blokad, 791Thread, 754tworzenie, 754uruchamianie, 752volatile, 784WAITING, 759warunki, 772wykonywanie zada w osobnych w tkach, 751wy cig, 764, 768wyw aszczanie, 758wyzerowanie statusu przerwania, 756zablokowane, 755, 759zakleszczenia, 774, 787zamykanie, 759zatrzymanie wykonywania, 751

weak reference, 458weakly consistent iterators, 802wej cie, 88wersje j zyka Java, 32wi zanie

dynamiczne, 199statyczne, 203

widoczno , 205widoki, 476, 568

kontrolowane, 465niemodyfikowalne, 464przedzia owe, 463synchronizowane, 465

wielkie liczby, 113wielko liter, 56wielokropek, 239wielow tkowo , 27wiersz polece , 41, 119wildcard type, 381, 404w asno ci interfejsów, 272w a ciwo ci

klas po rednicz cych, 324list, 471

w czanie asercji, 352wprowadzanie tekstu, 580wska niki do metod, 258wspó bie no , 745wspó czynnik zape nienia, 442wspó rz dne, 508

kodowe znaków, 64, 80wstawianie komentarzy javadoc, 185wybór

kolorów, 679opcji, 587plików, 669

wyciszanie wyj tków, 349wydajno kodu bajtowego, 27

wygl d, 568wyj tki, 328, 329

analiza danych ze ledzenia stosu, 345ArrayIndexOutOfBounds, 116ArrayIndexOutOfBoundsException, 330, 331BadCastException, 411blok try-catch, 335blok try-finally, 341, 342BrokenBarrierException, 829budowanie a cuchów, 339CancellationException, 839ClassCastException, 207, 256, 403, 466CloneNotSupportedException, 285ConcurrentModificationException, 435, 802diagram hierarchii, 329EmptyStackException, 350Error, 330Exception, 330FileNotFoundException, 331, 333, 738finally, 340IllegalAccessException, 252IllegalStateException, 425InterruptedException, 747, 752, 755IOException, 333, 336klasy wyj tków, 334klasyfikacja, 329kontrolowane, 243, 245, 330–332metody, 331niekontrolowane, 245, 330NullPointerException, 330, 350NumberFormatException, 349opis, 335powtórne generowanie, 339przechwytywanie, 244, 335, 337przekazywanie, 350RuntimeException, 330, 349specyfikacja, 332stosowanie, 348Throwable, 329TimeoutException, 811tworzenie klas wyj tków, 334UnsupportedOperationException, 462, 464wyciszanie, 349wykonawcze, 330zamykanie zasobów, 341zg aszanie, 333

wykonywalne pliki JAR, 696wykonywanie zada w osobnych w tkach, 751wyliczenia, 240, 480wy czanie

asercji, 352dziedziczenia, 205

wymazywanie typów, 389wype nianie figur, 513wypisywanie danych, 59wyra enia lambda, 288wysy anie zdarze , 493

Poleć książkęKup książkę

Page 90: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

870 Java. Podstawy

wyszukiwaniebinarne, 473b dów, 372

wy cig, 764, 768wy wietlanie

informacji w komponencie, 500obrazów, 525ramki, 494tekstu, 503

wyw aszczanie w tków, 758wywo anie

innego konstruktora, 169przez nazw , 159przez referencj , 159przez warto , 159

wyzerowanie statusu przerwania w tku, 756wzorce projektowe, 566wzorzec

Composite, 567Decorator, 567Strategy, 567

XX11, 502XML, 32

Zzablokowane w tki, 759zachowanie obiektu, 131zadanie, 754zakleszczenia, 774, 787zakres

dost pno ci zmiennych, 295typów caloitych, 60

zale no , 133zamiana parametrów obiektowych, 163zamykanie

aplikacji, 494w tków, 759zasobów, 341

zaokr glanie liczb, 71zapis

do dziennika, 355do pliku, 95preferencji u ytkownika, 701

zarz dca rozk adubrzegowego, 574ci g ego, 572grupowego, 624siatkowego, 576

zarz dzanie rozk adem, 572, 623GridBagLayout, 624

zasadajednego w tku, 832, 841zamienialno ci, 202

zasi gblokowy, 97pakietów, 180zmiennych, 97

zasoby, 697zatrzask z licznikiem, 828zbiory bitów, 482zbiór, 442

HashSet, 440TreeSet, 444

zdarzenia, 279, 529AWT, 560ChangeEvent, 601interfejs nas uchu, 530klasy adaptacyjne, 542mysz, 553niskiego poziomu, 561obiekty nas uchuj ce, 279obs uga, 279okna, 542procedura obs ugi, 529semantyczne, 561s uchacz, 530WindowEvent, 542ród o, 530

zegar, 278zg aszanie wyj tków, 333zintegrowane rodowisko programistyczne, IDE, 43zmiana

stanu okna, 561stylu, 538

zmienna liczba parametrów, 238zmienne, 65

atomowe, 785definicja, 66deklaracja, 65, 66finalne, 785interfejsowe, 272lokalne w tków, 790nazwy, 65obiektowe, 135polimorficzne, 202rodowiskowe

CLASSPATH, 184warunkowe, 772zasi g, 97

zmienne typowe, 385ograniczenia, 386statyczny kontekst klas uogólnionych, 398

znaczik@author, 185, 187@deprecated, 187@link, 188@Override, 219@param, 185, 186@return, 186@see, 188@since, 187

Poleć książkęKup książkę

Page 91: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

Skorowidz 871

@SuppressWarnings, 392@throws, 186@version, 187<applet>, 50, 717

align, 719alt, 719archive, 719code, 718, 719codebase, 719height, 719hspace, 719name, 720object, 719vspace, 719width, 719

<param>, 720

znaczniki dokumentacyjne, 185znajdowanie liczb pierwszych, 483znak

@, 185echa, 584wielokropka, 239

znakidodatkowe, 64konwersji, 91specjalne, 63Unicode, 65

zwolnienie klawisza, 561

ród o zdarze , 530

Poleć książkęKup książkę

Page 92: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne

872 Java. Podstawy

Poleć książkęKup książkę

Page 94: Tytuł oryginału: Core Java Volume I – Fundamentals (10th ... · 1.1. Java jako platforma programistyczna .....21 1.2. Säowa klucze biaäej ksiögi Javy ... Programowanie generyczne