V Indice Introduzione XIII Capitolo 1 La programmazione multithread 1 1.1 Cosa sono i thread 2 Utilizzare i thread per dare una possibilità ad altri task 9 Avvio ed esecuzione dei thread 10 Esecuzione di thread multipli 16 L interfaccia Runnable 16 1.2 Interruzione di thread 19 1.3 Proprietà dei thread 22 Stati dei thread 22 Nuovi thread 22 Thread eseguibili 23 Thread bloccati 23 Uscita dallo stato bloccato 25 Thread morti 26 Thread daemon 26 Gruppi di thread 26 1.4 Priorità dei thread 29 1.5 Thread indipendenti 38 1.6 Sincronizzazione 45 Comunicazione senza sincronizzazione 45 Come sincronizzare l accesso alle risorse condivise 50 Oggetti bloccati 55 I metodi wait e notify 56 Blocchi sincronizzati 62 Metodi statici sincronizzati 63 1.7 Situazioni di stallo 65 Perché i metodi stop e suspend sono sconsigliati 67 indice_ok.p65 5
VI Timeout 73 1.8 Programmazione di interfacce utente 75 Thread e Swing 75 Animazioni 85 Timer 91 Barre di avanzamento 95 Monitor di avanzamento 101 Monitorare l avanzamento di flussi di input 106 1.9 Utilizzo di pipe 113 Capitolo 2 Collection 119 2.1 Interfacce delle collection 119 Separare le interfacce delle collection dall implementazione 120 Interfacce delle collection e di iterazione della libreria Java 123 2.2 Collection concrete 129 Elenchi collegati 130 Elenchi di array 141 Serie hash 141 Funzioni hash 147 Serie ad albero 149 Confronto di oggetti 150 Mappe 156 Classi di mappe specializzate 163 2.3 La struttura delle collection 167 Visualizzazioni e wrapper 172 Sottointervalli 175 Wrapper di collection leggere 176 Una nota finale sulle operazioni facoltative 176 Operazioni di massa 179 Interfaccia con le API ereditate 180 2.4 Algoritmi 182 Ordinamento e mescolamento 183 Ricerca binaria 187 Algoritmi semplici 188 Scrittura di algoritmi personalizzati 190 2.5 Collection ereditate 192 La classe Hashtable 192 Enumerazioni 192 Serie di proprietà 194 Informazioni di sistema 195 Proprietà predefinite 197 Stack 201 Serie di bit 201 La prova del crivello di Eratostene 203 indice_ok.p65 6
VII Capitolo 3 Reti 207 3.1 Collegamento al server 207 3.2 Implementazione dei server 212 Come servire più client 215 3.3 Invio di posta elettronica 219 3.4 Programmazione di socket avanzata 225 Timeout dei socket 225 Mezza chiusura 226 Indirizzi Internet 227 3.5 Connessioni a URL 231 URL e URI 232 Utilizzo di URLConnection per recuperare informazioni 234 3.6 Trasmissione di dati in moduli 246 Script CGI e servlet 246 Invio di dati a un server Web 248 3.7 Recupero di informazioni dal Web 255 Sicurezza delle applet 262 Server proxy 266 Verifica dell applet WeatherReport 274 Capitolo 4 Collegamento ai database: JDBC 277 4.1 La struttura di JDBC 279 Utilizzo tipico di JDBC 281 4.2 SQL 283 4.3 Installazione di JDBC 289 4.4 Concetti di base della programmazione JDBC 290 URL di database 290 Creazione della connessione 291 Esecuzione di comandi SQL 296 Tipi di dati SQL avanzati (JDBC 2) 298 Riempimento di un database 301 4.5 Esecuzione di query 305 4.6 Set di risultati scorrevoli e aggiornabili 318 Set di risultati scorrevoli (JDBC 2) 319 Set di risultati aggiornabili (JDBC 2) 322 4.7 Metadati 327 4.8 Transazioni 338 Aggiornamenti batch (JDBC 2) 339 4.9 Gestione avanzata delle connessioni 341 Capitolo 5 Oggetti remoti 345 Introduzione agli oggetti remoti: il ruolo del client e del server 346 5.1 Remote Method Invocation 349 indice_ok.p65 7
VIII Stub e marshal dei parametri 350 Caricamento di classe dinamico 352 Impostazione di Remote Method Invocation 353 Interfacce e implementazioni 353 Localizzazione degli oggetti server 357 Avvio del server 360 Il lato client 362 Esecuzione del client 363 Preparazione all installazione 367 Installazione del programma 370 5.3 Passaggio di parametri nei metodi remoti 372 Passaggio di oggetti non remoti 372 Passaggio di oggetti remoti 385 Utilizzo di oggetti remoti nei set 389 Clonazione di oggetti remoti 390 Parametri remoti inappropriati 391 5.4 Utilizzo di RMI con le applet 392 5.5 Attivazione dell oggetto server 397 5.6 Java IDL e CORBA 405 IDL - il linguaggio di definizione delle interfacce 406 Un esempio CORBA 412 Implementazione di server CORBA 423 Capitolo 6 Swing avanzato 431 6.1 Elenchi 431 Il componente JList 432 Modelli di elenchi 437 Inserimento ed eliminazione di valori 442 Visualizzazione di valori 444 6.2 Alberi 450 Alberi semplici 452 Modifica di alberi e percorsi 462 Enumerazione di nodi 471 Rappresentazione dei nodi 473 Rilevamento di eventi di albero 481 Modelli di alberi personalizzati 488 6.3 Tabelle 498 Una semplice tabella 498 Modelli di tabelle 502 Visualizzazione di record di database 506 Un filtro di ordinamento 514 Visualizzazione e modifica delle celle 523 Modifica delle celle 525 Editor personalizzati 528 Utilizzo di righe e colonne 541 Ridimensionamento delle colonne 541 indice_ok.p65 8
IX Selezione di righe, colonne e celle 542 Nascondere e visualizzare colonne 544 Inserimento ed eliminazione di righe nel modello di tabella predefinito 545 6.4 Componenti di testo con stile 552 6.5 Organizzatori di componenti 559 Riquadri di divisione 559 Riquadri a schede 564 Riquadri desktop e frame interni 570 Sovrapposizioni e disposizioni 574 Rifiuto delle impostazioni delle proprietà 578 Finestre di dialogo nei frame interni 580 Trascinamento 580 Capitolo 7 Funzioni AWT avanzate 593 7.1 Il processo di rendering 593 7.2 Forme 596 Utilizzo delle classi Shape 598 7.3 Aree 614 7.4 Penne 618 7.5 Riempimento 628 7.6 Trasformazione delle coordinate 635 7.7 Ritaglio 645 7.8 Trasparenza e composizione 650 7.9 Suggerimenti per il rendering 660 7.10 Leggere e scrivere immagini 667 Ottenere lettori e scrittori per i vari tipi di file di immagine 668 Leggere e scrivere file con immagini multiple 670 7.11 Manipolazione delle immagini 681 Accesso ai dati dell immagine 682 Filtrare le immagini 690 7.12 Stampa 699 Stampa di grafiche 700 Stampa di più pagine 712 Anteprima di stampa 714 Servizi di stampa 724 Servizi di stampa di flusso 732 Attributi di stampa 738 7.13 Gli appunti 746 Classi e interfacce per il trasferimento di dati 747 Trasferimento di testo 748 L interfaccia Transferable e i tipi di dati 754 Creazione di un immagine Transferable 755 Utilizzo di appunti locali per trasferire riferimenti a oggetti 762 indice_ok.p65 9
X Trasferimento di oggetti Java attraverso gli appunti di sistema 769 Drag and Drop 773 Destinazioni delle operazioni di rilascio 775 Origini delle operazioni di trascinamento 786 Supporto al trasferimento di dati in Swing 793 Capitolo 8 JavaBeans 797 8.1 Perché i bean? 797 8.2 Il processo di scrittura dei bean 800 8.3 Utilizzo dei bean per creare un applicazione 804 Raccogliere i bean nei file JAR 805 Unire i bean in un ambiente di creazione 807 8.4 Scelta dei nomi per proprietà ed eventi dei bean 813 8.5 Tipi di proprietà dei bean 816 Proprietà semplici 817 Proprietà indicizzate 817 Proprietà associate 819 Proprietà limitate 826 8.6 Aggiunta di eventi bean personalizzati 838 8.7 Editor delle proprietà 844 Scrivere un editor delle proprietà 853 Editor delle proprietà semplici 854 Editor delle proprietà basati sulle GUI 857 Ricapitolando 869 8.8 Oltre i modelli di nomi 870 Oggetti FeatureDescriptor 872 8.9 Personalizzatori 881 Scrivere una classe del personalizzatore 883 8.10 Il contesto dei bean 892 Utilizzi avanzati dell introspezione 892 Ricerca di bean fratelli 895 Utilizzo dei servizi di contesto del bean 898 Capitolo 9 Sicurezza 909 9.1 Caricatori di classi 910 Scrivere il proprio caricatore di classi 914 9.2 Verifica del bytecode 921 9.3 Gestori della sicurezza e autorizzazioni 926 La sicurezza nella piattaforma Java 2 928 File della policy di sicurezza 934 Autorizzazioni personalizzate 943 Implementare una classe di autorizzazioni 944 Un gestore della sicurezza personalizzato 951 Autenticazione dell utente 961 9.4 Firme digitali 967 indice_ok.p65 10
XI Impronte di messaggio 967 Firma dei messaggi 974 Autenticazione del messaggio 982 Il formato X.509 984 Generare i certificati 986 Firmare i certificati 989 9.5 Firma del codice 998 Firmare i file JAR 998 Suggerimenti per l installazione 1003 Certificati per gli sviluppatori di software 1004 9.6 Cifratura 1005 Cifrari simmetrici 1006 Cifrario a chiave pubblica 1013 Flussi di cifrari 1019 Capitolo 10 Internazionalizzazione 1021 10.1 Località 1022 10.2 Numeri e valute 1029 10.3 Data e ora 1036 10.4 Testo 1044 Confronto (Ordinamento) 1045 Limiti del testo 1053 Formattazione dei messaggi 1060 Formati di scelta 1065 Conversione dei set di caratteri 1069 Problemi di internazionalizzazione e file sorgente 1071 10.5 Insiemi di risorse 1072 Localizzazione delle risorse 1073 Inserire le risorse negli insiemi 1074 10.6 Localizzazione dell interfaccia grafica utente 1078 Localizzare un applet 1081 Capitolo 11 Metodi nativi 1099 11.1 Chiamata a una funzione C dal linguaggio di programmazione Java 1101 Lavorare con la funzione printf 1102 11.2 Parametri numerici e valori restituiti 1107 Utilizzo di printf per la formattazione di numeri 1108 11.3 Parametri stringa 1110 Chiamare sprintf in un metodo nativo 1114 11.4 Accesso a campi oggetto 1116 11.5 Accesso a campi statici 1119 11.6 Firme 1122 11.7 Chiamare metodi Java 1124 indice_ok.p65 11
XII Metodi non statici 1124 Metodi statici 1126 Costruttori 1127 Chiamate di metodo alternative 1127 11.8 Array 1132 11.9 Gestione di errori 1137 11.10 L API di chiamata 1143 11.11 Un esempio completo: accesso al registro di Windows 1147 Una panoramica del registro di Windows 1147 Un interfaccia di piattaforma Java per accedere al registro 1148 Capitolo 12 XML 1165 12.1 Introduzione a XML 1165 La struttura di un documento XML 1168 12.1 Analizzare un documento XML 1172 12.3 Document Tipe Definition 1185 Un esempio pratico 1194 12.4 Namespace 1208 12.5 Utilizzare l analizzatore SAX 1211 12.6 Generare documenti XML 1216 12.7 Trasformazioni XSL 1226 Indice analitico 1247 indice_ok.p65 12