Programmazione Orientata agli Oggetti in Linguaggio Java



Documenti analoghi
Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Sommario. Introduzione Architettura Client-Server. Server Web Browser Web. Architettura a Due Livelli Architettura a Tre Livelli

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Tecnologie di Sviluppo per il Web

Corso sul linguaggio Java

Multithreading in Java. Fondamenti di Sistemi Informativi

Programmazione Procedurale in Linguaggio C++

Java Virtual Machine

GESTIONE DEI PROCESSI

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Appunti di Informatica 1

Programmazione Orientata agli Oggetti in Linguaggio Java

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tale attività non è descritta in questa dispensa

appunti delle lezioni Architetture client/server: applicazioni server

utente: collezione di contenuti e servizi sviluppatore: pagine e applicazioni

Telematica II 17. Esercitazione/Laboratorio 6

Programmazione Orientata agli Oggetti in Linguaggio Java

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Traduzione ed esecuzione di programmi. Dispensa 08

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Programmazione Orientata agli Oggetti in Linguaggio Java

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Progettazione : Design Pattern Creazionali

Eclipse. Avviare un progetto e compilare un semplice programma

Programmazione Orientata agli Oggetti in Linguaggio Java

INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014)

Concetto di Funzione e Procedura METODI in Java

Java: Compilatore e Interprete

Esercitazioni di PROGETTAZIONE DEL SOFTWARE A.A

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Le basi della grafica in Java. Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Java: Interfacce grafiche (GUI)

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione a Oggetti Lezione 10. Ereditarieta

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Strumenti per la programmazione

Grafico della parabola

Programmazione Orientata agli Oggetti in Linguaggio Java

Sistemi operativi. Esempi di sistemi operativi

Registratori di Cassa

Funzioni in C. Violetta Lonati

DESIGN PATTERNS Parte 6. State Proxy

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Come costruire una presentazione. PowerPoint 1. ! PowerPoint permette la realizzazione di presentazioni video ipertestuali, animate e multimediali

Parola chiave extends

GUARINI PATRIMONIO CULTURALE VERSIONE MSDE/SQL SERVER MANUALE DI INSTALLAZIONE GUARINI PATRIMONIO CULTURALE VERSIONE MSDE/SQL SERVER

Il Programma... 3 I moduli... 3 Installazione... 3 La finestra di Login... 4 La suite dei programmi... 6 Pannello voci... 10

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Introduzione alla rete Internet

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe È qualcosa che abbiamo già visto varie volte

Esercizio 1: trading on-line

Mappatura dei canali logici sui canali fisici

SmartGPS Satellite Information System Guida all utilizzo del programma Sviluppato da Fabio e Marco Adriani Versione 1.0.0

Gestione delle Cartelle dei Messaggi di Posta Elettronica

Programmazione Orientata agli Oggetti in Linguaggio Java

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

Inetd e TCP Wrappers

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Design Pattern in Java

Object Oriented Software Design

Guida Migrazione Posta Operazioni da effettuare entro il 15 gennaio 2012

IBM SPSS Statistics per Windows - Istruzioni di installazione (Licenza per utenti singoli)

Scheduling della CPU Simulazione in linguaggio Java

SOMMARIO Gruppo 4 - All right reserved 1

Web Content Management and E- Learning

Tecnologie di Sviluppo per il Web

Programmare in Java. Olga Scotti

Tecnologie di Sviluppo per il Web

Xerox Device Agent, XDA-Lite. Guida all installazione rapida

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Utilizzo del plugin ApSIC Xbench per SDL Trados Studio 2014

Università di L Aquila Facoltà di Biotecnologie Agro-alimentari

Programmazione Orientata agli Oggetti in Linguaggio Java

AMBIENTE GRAFICO DI FEDORA: ATTIVITA ESEGUIBILI DA TUTTI GLI UTENTI

Internet Explorer 6. Gestione cookie

Java threads (2) Programmazione Concorrente

13. Chain of Responsibility

SPSS Statistics per Windows - Istruzioni di installazione per (Licenza per utenti singoli)

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa.

Configurare TPTP in Eclipse e testare un applicazione

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Transcript:

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Grafica: Thread versione 1.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca Università della Basilicata mecca@unibas.it Programmazione Grafica: Thread >> Sommario Sommario Introduzione 2

Programmazione Grafica: Thread >> Introduzione Introduzione Relazione tra thread e Swing molto forte, dal momento che i thread sono uno strumento centrale per la programmazione grafica per la segnalazione degli eventi alla macchina virtuale per la gestione degli eventi nell applicazione ed il disegno dei componenti 3 Programmazione Grafica: Thread >> Introduzione Introduzione Due aspetti centrali di questo rapporto la regola del thread singolo di Swing l esecuzione di operazioni lunghe Da cosa discendono dal fatto che Swing NON è un package sicuro rispetto ai thread Package sicuro ( thread safe ) i metodi sono sincronizzati in modo da garantire la consistenza 4

Programmazione Grafica: Thread >> Introduzione Introduzione Il perchè di questa scelta AWT è un package sicuro rispetto ai thread Swing no, fondamentalmente per due ragioni I ragione: prestazioni; sincronizzare rallenta le operazioni II ragione: complessità; per evitare gli stalli, programmare con le librerie sicure è difficile Si tratta di un fenomeno già visto java.util.vector e Hashtable 5 Programmazione Grafica: Thread >> Introduzione Introduzione Come stanno davvero le cose Swing non è quasi mai sincronizzato ma alcuni metodi lo sono ma AWT è completamente sincronizzato e i componenti Swing ereditano dai componenti AWT quindi la realtà è che il modello di esecuzione è misto (parzialmente sincronizzato) 6

Programmazione Grafica: Thread >> Per risolvere il problema Swing si basa su una regola tutte le operazioni di disegno dei componenti devono avvenire in un unico thread Il Thread di Gestione degli Eventi Event Dispatching Thread o AWT-thread il thread di sistema in cui vengono avviati tutti i gestori di eventi (listener) 7 Programmazione Grafica: Thread >> Il thread AWT viene automaticamente avviato alla prima chiamata del metodo paint() o repaint() questi metodi sono scritti in modo da essere sempre eseguiti nel thread AWT Da quel momento il thread AWT resta in attesa (await()) che nella coda degli eventi siano inseriti eventi li preleva e li notifica agli opportuni listener 8

Programmazione Grafica: Thread >> La regola del thread singolo di Swing per evitare corse e stalli, tutti i metodi di disegno dei componenti devono essere esegiuti nell AWT-thread Non rispettare questa regola è abbastanza semplice: basta chiamare metodi di disegno dei componenti dal main thread 9 Programmazione Grafica: Thread >> Un esempio >> varie\framestallo\framestallo.java >> dump dei thread un frame sviluppato come singleton che contiene al suo interno un JDesktopPane e un JInternalFrame eseguito, conduce sistematicamente allo stallo a causa della competizione tra il main thread e l AWT-thread per il disegno dei componenti 10

Programmazione Grafica: Thread >> public class FrameStallo extends javax.swing.jframe { private static FrameStallo singleton; static { singleton = new FrameStallo(); private FrameStallo() { DesktopPane desktop = new DesktopPane(); // spostando queste istruzioni in basso getcontentpane().add(desktop); // lo stallo può essere evitato setdefaultcloseoperation(exit_on_close); setsize(300, 300); setvisible(true); settitle("frame Stallo"); desktop.add(new javax.swing.jinternalframe()); private class DesktopPane extends javax.swing.jdesktoppane { protected void paintcomponent(java.awt.graphics g) { super.paintcomponent(g); System.out.println("In attesa di esecuzione del metodo statico"); getinstance(); private static FrameStallo getinstance() { System.out.println("Questo metodo non verra' eseguito"); return singleton; public static void main(string[] args) { 11 Programmazione Grafica: Thread >> Per risolvere il problema è necessario utilizzare i metodi della coda degli eventi il metodo invokelater() consente di inserire un evento nella coda degli eventi il gestore dell evento è il metodo run() di un oggetto di tipo runnable come tutti gli altri gestori, il metodo run() viene eseguito nell AWT 12

Programmazione Grafica: Thread >> public static void main(string args[]) { java.awt.eventqueue.invokelater(new Runnable() { public void run() { new Principale().setVisible(true); ); NOTA: il metodo run() non viene eseguito in un proprio thread, ma in un thread già esistente (l AWT-thread) public static void main(string args[]) { javax.swing.swingutilities.invokelater(new Runnable() { public void run() { new Principale().setVisible(true); ); in alternativa è possibile utilizzare il metodo invokelater() della classe SwingUtilities 13 Programmazione Grafica: Thread >> Nel caso del nostro FrameStallo una possibile soluzione è costruire il frame nel thread AWT public class FrameStallo extends javax.swing.jframe { private static FrameStallo singleton; static { javax.swing.swingutilities.invokelater(new Runnable() { public void run() { singleton = new FrameStallo(); ); 14

Programmazione Grafica: Thread >> Nota i metodi pericolosi sono i metodi di disegno non i metodi che creano componenti prima di disegnarli quindi è perfettamente sicuro inizializzare un frame o un pannello nel main thread prima di disegnarlo bisogna poi disegnarlo nel thread AWT 15 Programmazione Grafica: Thread >> Un problema molto serio che discende dalla regola del thread singolo il codice di disegno, la segnalazione degli eventi e la gestione degli eventi avviene in un unico thread se un listener effettua un operazione molto lunga, blocca il thread AWT e l applicazione resta congelata ovvero non risponde più ai gesti dell utente 16

Programmazione Grafica: Thread >> >> mediapesataswing\azioneexcelnothread Un esempio: la media pesata il comando Apri con Excel, che apre il documento creato con Microsoft Excel Per farlo viene lanciato un nuovo processo utilizzando le classi Runtime e Process per rendere lunga l esecuzione del listener, viene usato il metodo waitfor() l applicazione resta completamente bloccata 17 Programmazione Grafica: Thread >> La soluzione corretta eseguire le azioni lunghe in thread separati in modo da evitare di appesantire il thread AWT Ma attenzione... nel thread separato non è possibile eseguire operazioni di disegno, per evitare di violare la regola del thread singolo 18

Programmazione Grafica: Thread >> I caso tipico nell azione viene avviato un thread separato creando un runnable il cui metodo run() contiene il codice dell azione lunga durante l azione lunga è necessario ridisegnare alcuni componenti (es: barra di avanzamento) in questo caso dal nuovo thread è possibile eseguire codice nel thread AWT utilizzando EventQueue.invokeLater() 19 Programmazione Grafica: Thread >> II caso tipico è necessario eseguire un azione lunga, e al termine produrre uno schermo che contiene il risultato questo è un problema più complesso, perchè richiede la sincronizzazione tra i due thread La soluzione la classe SwingWorker 20

Programmazione Grafica: Thread >> SwingWorker una classe non ufficiale, di pubblico dominio è possibile estenderla ridefinendo due metodi construct(): operazioni da eseguire in un thread separato finished(): operazioni da eseguire al termine nel thread AWT 21 Programmazione Grafica: Thread >> Un esempio AzioneExcel risolve il problema del blocco dell interfaccia utilizzando SwingWorker ping ha una sua classe PingThreadWorker basata su SwingWorker >> mediapesataswing\azioneexcel nel package it.unibas.ping.contrib 22

Programmazione Grafica: Thread >> Sommario Riassumendo Introduzione 23 Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Questo lavoro viene concesso in uso secondo i termini della licenza Attribution-ShareAlike di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 24