Creazione di un download manager in Java

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Creazione di un download manager in Java"

Transcript

1 34 Creazione di un download manager in Java Se ci si è collegati a Internet con una connessione telefonica, probabilmente si è sperimentata l interruzione di un download, con la necessità di ricominciare da zero. Le disconnessioni della linea o i crash del computer possono interrompere un download. Tuttavia, anche con una connessione ad alta velocità si possono verificare interruzioni della trasmissione. Come minimo, il riavvio di un download può far perdere tempo ed essere un esperienza frustrante. Un fatto a volte sottovalutato è che molti download interrotti si possono riprendere. Ciò consente di riavviare il download dal punto in cui si è interrotto invece di iniziare di nuovo. Nel presente capitolo si sviluppa uno strumento dal nome Download Manager che gestisce i download da Internet e semplicemente riprende i download interrotti. Consente inoltre di fermare e riprendere un download e di gestire download multipli contemporaneamente. Al centro dell utilità del Download Manager si trova la capacità di sfruttare lo scaricamento di parti specifiche di un file. In uno scenario di download classico, un intero file viene scaricato dall inizio alla fine. Se la trasmissione del file viene interrotta per qualche motivo, si perde l avanzamento verso il completamento del download. Il Download Manager, tuttavia, può riprendere dal punto in cui si è verificata un interruzione e scaricare solo la parte restante del file. Non tutti i download vengono creati allo stesso modo e alcuni non possono semplicemente essere ripresi. I dettagli sui file che non possono essere ripresi sono spiegati nel prossimo paragrafo. Non solo il Download Manager è un utility utile, ma illustra anche in modo eccellente la potenza e la concisione delle API incorporate di Java, in particolare per l interfacciamento a Internet. Poiché Internet è stata una delle forze dietro la

2 40 Capitolo 34 creazione di Java, non sorprende che le capacità di rete di Java siano insuperabili. Per esempio, il tentativo di creare il Download Manager in un altro linguaggio, quale C++, comporterebbe molti più problemi e lavoro I download da Internet Per capire e apprezzare il Download Manager è necessario capire come funzionano i download da Internet. Nella loro forma più semplice i download da Internet sono semplicemente transazioni client/server. Il client, il browser, richiede di scaricare un file da un server su Internet. Il server risponde inviando il file richiesto al browser. Affinché i client possano comunicare con i server, devono avere un protocollo definito. I protocolli più utilizzati per scaricare file sono File Transfer Protocol (FTP, protocollo di trasferimento di file) e Hypertext Transfer Protocol (HTTP, protocollo di trasferimento di ipertesti). Solitamente FTP è associato allo scambio di file tra computer, mentre HTTP è associato specificatamente al trasferimento di pagine web e dei relativi file (grafiche, suoni e così via). Nel tempo, con la crescita di popolarità del World Wide Web, HTTP è diventato il protocollo dominante per lo scaricamento di file da Internet, ma FTP non è completamente estinto. Per motivi di spazio il Download Manager sviluppato nel presente capitolo supporta solo download HTTP. Tuttavia l aggiunta di supporto per FTP è un ottimo esercizio per l estensione del codice. I download HTTP ha due forme: riprendibile (HTTP 1.1) e non riprendibile (HTTP 1.0). La differenza tra le due forme sta nel modo in cui è possibile richiedere i file dai server. Con il vecchio HTTP 1.0, un client può richiedere solo che un server invii un file, mentre con HTTP 1.1 un client può richiedere che un server invii un file completo o solo una parte specifica di un file. Si tratta della caratteristica su cui è creato il Download Manager Una panoramica sul Download Manager Il Download Manager utilizza una semplice ma efficace interfaccia GUI realizzata con le librerie Swing di Java. La finestra del Download Manager è mostrata nella Figura L utilizzo di Swing fornisce all interfaccia un aspetto moderno. La GUI mantiene un elenco di download gestiti. Ogni download nell elenco indica l URL, le dimensioni del file in byte, l avanzamento come percentuale verso il completamento e lo stato corrente. I download si possono trovare in uno degli stati indicati di seguito: Downloading (in scaricamento), Paused (in pausa), Complete (completo), Error (errore) o Cancelled (annullato). La GUI dispone inoltre di controlli per aggiungere download all elenco e per modificare lo stato di ogni download nell elenco. Quando si seleziona un download nell elenco, secondo lo stato corrente può essere messo fermato, ripreso, annullato o eliminato dall elenco. Il Download Manager è suddiviso in classi per la separazione naturale dei componenti funzionali: Download, DownloadsTableModel, ProgressRenderer e DownloadManager. La classe DownloadManager è responsabile dell interfaccia GUI e utilizza le classi DownloadsTableModel e ProgressRenderer per la visua-

3 Creazione di un download manager in Java 41 lizzazione dell elenco di download correnti. La classe Download rappresenta un download gestito ed è responsabile dello scaricamento di un file. Nei paragrafi di seguito si esamina in dettaglio ogni classe, evidenziandone il funzionamento e spiegandone il rapporto con le altre. Figura 34.1 L interfaccia GUI del Download Manager La classe Download La classe Download è il cavallo da tiro del Download Manager. Lo scopo primario è scaricare un file e salvarne i contenuti nel disco. Ogni volta che si aggiunge un nuovo download al Download Manager, viene creato un nuovo oggetto Download per gestirlo. Il Download Manager è in grado di scaricare più file contemporaneamente. Per farlo è necessario che ogni download sia eseguito in modo indipendente. È inoltre necessario che ogni singolo download gestisca il proprio stato in modo che possa essere riflesso nella GUI. Ciò si ottiene con la classe Download. Il codice completo per Download è mostrato di seguito. Si noti che estende Observable e implementa Runnable. Ogni parte si esamina in dettaglio nei paragrafi successivi. PARTE IV import java.io.*; import java.net.*; import java.util.*; // Questa classe scarica un file da un URL. class Download extends Observable implements Runnable { // Dimensioni max del buffer di download. private static final int MAX_BUFFER_SIZE = 1024; // Questi sono i nomi degli stati.

4 42 Capitolo 34 public static final String STATUSES[] = { Downloading, Paused, Complete, Cancelled, Error ; // Questi sono i codici degli stati. public static final int DOWNLOADING = 0; public static final int PAUSED = 1; public static final int COMPLETE = 2; public static final int CANCELLED = 3; public static final int ERROR = 4; private URL url; // URL di download private int size; // dimensioni del download in byte private int downloaded; // numero di byte scaricati private int status; // stato corrente del download // Costruttore per Download. public Download(URL url) { this.url = url; size = -1; downloaded = 0; status = DOWNLOADING; // Inizia il download. download(); // Otiene l URL del download. public String geturl() { return url.tostring(); // Otiene le dimensioni del download. public int getsize() { return size; // Ottiene l avanzamento del download. public float getprogress() { return ((float) downloaded / size) * 100; // Ottiene lo stato del download. public int getstatus() { return status; // Ferma il download. public void pause() { status = PAUSED; statechanged();

5 Creazione di un download manager in Java 43 // Riprende il download. public void resume() { status = DOWNLOADING; statechanged(); download(); // Annulla il download. public void cancel() { status = CANCELLED; statechanged(); // Contrassegna il download come con errore. private void error() { status = ERROR; statechanged(); // Avvia o riprende il download. private void download() { Thread thread = new Thread(this); thread.start(); // Ottiene la parte di nome di file dell URL. private String getfilename(url url) { String filename = url.getfile(); return filename.substring(filename.lastindexof( / ) + 1); // Scarica il file. public void run() { RandomAccessFile file = null; InputStream stream = null; PARTE IV try { // Apre connessione verso l URL. HttpURLConnection connection = (HttpURLConnection) url.openconnection(); // Specifica la parte di file da scaricare. connection.setrequestproperty( Range, bytes= + downloaded + - ); // Si connette al server. connection.connect(); // Verifica che il codice di risposta sia nell intervallo 200.

6 44 Capitolo 34 if (connection.getresponsecode() / 100!= 2) { error(); // Controlla la validità della lunghezza dei contenuti. int contentlength = connection.getcontentlength(); if (contentlength < 1) { error(); /* Imposta le dimensioni per il download se non sono già impostate. */ if (size == -1) { size = contentlength; statechanged(); // Apre il file e ne cerca la fine. file = new RandomAccessFile(getFileName(url), rw ); file.seek(downloaded); stream = connection.getinputstream(); while (status == DOWNLOADING) { /* Dimensiona il buffer secondo la quantità di file restata da scaricare. */ byte buffer[]; if (size - downloaded > MAX_BUFFER_SIZE) { buffer = new byte[max_buffer_size]; else { buffer = new byte[size - downloaded]; // Legge dal server nel buffer. int read = stream.read(buffer); if (read == -1) break; // Scrive il buffer nel file. file.write(buffer, 0, read); downloaded += read; statechanged(); /* Cambia lo stato in completo se questo punto è stato raggiunto perché è finito il download. */ if (status == DOWNLOADING) { status = COMPLETE;

7 Creazione di un download manager in Java 45 statechanged(); catch (Exception e) { error(); finally { // Chiude il file. if (file!= null) { try { file.close(); catch (Exception e) { // Chiude la connessine al server. if (stream!= null) { try { stream.close(); catch (Exception e) { // Segnala agli osservatori che lo stato del download è cambiato. private void statechanged() { setchanged(); notifyobservers(); Le variabili di Download Download inizia dichiarando numerose variabili static final che specificano le diverse costanti utilizzate dalla classe, quindi sono dichiarate quattro variabili di istanza. La variabile url contiene l URL Internet per il file da scaricare, la variabile size contiene le dimensioni del file da scaricare in byte; la variabile downloaded contiene il numero di byte scaricati e la variabile status indica lo stato corrente del download. PARTE IV Il costruttore di Download Al costruttore di Download si passa un riferimento all URL da scaricare sotto forma di un oggetto URL, assegnato alla variabile di istanza url. Si impostano quindi le variabili di istanza restanti sui relativi stati iniziali e si chiama il metodo download(). Si noti che size è impostata su -1 a indicare che non sono ancora presenti le dimensioni. Il metodo download() Il metodo download() crea un nuovo oggetto Thread, passando ad esso un riferimento all istanza di Download chiamante. Come detto in precedenza, è necessario che ogni download sia eseguito in modo indipendente. Affinché la classe

8 46 Capitolo 34 Download agisca da sola, deve essere eseguita nel proprio thread. Java dispone di un eccellente supporto incorporato per i thread e ne facilita l utilizzo. Per utilizzare i thread, la classe Download implementa semplicemente l interfaccia Runnable ridefinendo il metodo run(). Quando il metodo download() ha creato una nuova istanza di Thread, passando al costruttore la classe Download Runnable, chiama il metodo start() del thread. La chiamata al metodo start() fa in modo che sia eseguito il metodo run() dell istanza Runnable (della classe Download). Il metodo run() Quando viene eseguito il metodo run(), inizia il download effettivo. A causa delle dimensioni e dell importanza di tale metodo, viene esaminato in dettaglio. Il metodo run() inizia con le righe mostrate di seguito: RandomAccessFile file = null; InputStream stream = null; try { // Apre connessione verso l URL. HttpURLConnection connection = (HttpURLConnection) url.openconnection(); run() imposta le variabili per il flusso di rete da cui vengono letti i contenuti del download e imposta il file in cui si scrivono i contenuti del download. Quindi apre una connessione verso l URL del download chiamando url.openconnection(). Poiché è noto che il Download Manager supporta solo download HTTP, la connessione viene convertita nel tipo HttpURLConnection. La conversione della connessione in HttpURLConnection consente di sfruttare le funzioni di connessione specifiche per HTTP quali il metodo getresponsecode(). Si noti che la chiamata a url.openconnection() non crea una connessione verso il server dell URL; crea semplicemente una nuova istanza URLConnection associata all URL che in seguito verrà utilizzato per la connessione al server. Dopo la creazione di HttpURLConnection, si imposta la proprietà di richiesta della connessione chiamando connection.setrequestproperty(), come mostrato di seguito: // Specifica la parte di file da scaricare. connection.setrequestproperty( Range, bytes= + downloaded + - ); L impostazione delle proprietà di richiesta consente di inviare informazioni extra sulla richiesta al server da cui proviene il download. In questo caso si imposta la proprietà Range. È molto importante, poiché la proprietà Range specifica l intervallo di byte richiesti per il download dal server. Normalmente vengono scaricati tutti i byte del file in una sola volta. Tuttavia, se un download è stato interrotto o fermato, si devono recuperare solo i byte restanti del download. L impostazione della proprietà Range è la base del funzionamento del Download Manager.

9 Creazione di un download manager in Java 47 La proprietà Range è specificata come di seguito: byte iniziale-byte finale Per esempio, Tuttavia il byte finale dell intervallo è opzionale. Se il byte finale è assente, l intervallo termina alla fine del file. Il metodo run() non specifica mai il byte finale perché i download devono essere eseguiti fino allo scaricamento dell intero intervallo, se non vengono messi in pausa o interrotti. Le righe successive sono mostrate di seguito: // Si connette al server. connection.connect(); // Verifica che il codice di risposta sia nell intervallo 200. if (connection.getresponsecode() / 100!= 2) { error(); // Controlla la validità della lunghezza dei contenuti. int contentlength = connection.getcontentlength(); if (contentlength < 1) { error(); Viene chiamato il metodo connection.connect() per effettuare la connessione al server di download. Quindi si controlla il codice di risposta restituito dal server. Il protocollo HTTP ha un elenco di codici di risposta che indicano la risposta di un server a una richiesta. I codici di risposta HTTP sono organizzati in intervalli numerici di cento in cento e l intervallo 200 indica il successo. Si controlla che codice di risposta del server sia nell intervallo 200 chiamando connection.getresponsecode() e dividendolo per 100. Se il valore della divisione è 2, la connessione è stata effettuata con successo. Quindi run() ottiene la lunghezza del contenuto chiamando connection.get- ContentLength(). La lunghezza del contenuto rappresenta il numero di byte nel rile richiesto. Se la lunghezza del contenuto è minore di 1, viene chiamato il metodo error(), che aggiorna lo stato del download su ERROR, quindi chiama state- Changed(). Il metodo statechanged() è descritto in dettaglio più avanti. Dopo avere ottenuto la lunghezza del contenuto, il codice di seguito controlla se è già stato assegnato alla variabile size: PARTE IV /* Imposta le dimensioni per il download se non sono già impostate. */ if (size == -1) { size = contentlength; statechanged();

10 48 Capitolo 34 Come si può osservare, invece di assegnare la lunghezza del contenuto alla variabile size in modo incondizionato, viene assegnata solo se non ha già un valore. Il motivo è che la lunghezza del contenuto riflette il numero di byte che il server invierà. Se si specifica un elemento diverso da un inizio di intervallo basato su 0, la lunghezza del contenuto rappresenta solo una parte delle dimensioni del file. La variabile size deve essere impostata sulle dimensioni complete del file di download. Le righe di codice successive mostrate di seguito creano un nuovo RandomAccessFile utilizzando la parte di nome di file dell URL del download recuperato con una chiamata al metodo getfilename(): // Apre il file e ne cerca la fine. file = new RandomAccessFile(getFileName(url), rw ); file.seek(downloaded); Il RandomAccessFile viene aperto in modalità rw, che specifica che è possibile leggere il file e scrivere in esso. Quando il file è aperto, run() cerca la fine del file chiamando il metodo file.seek(), passando la variabile downloaded. Ciò indica al file di posizionarsi sul numero di byte scaricati, in altre parole alla fine. È necessario posizionare il file alla fine nel caso in cui un download sia stato ripreso. Se si riprende un download, i byte scaricati vengono aggiunti alla fine del file e non sovrascrivono i byte scaricati in precedenza. Dopo la preparazione del file di output, si ottiene un gestore del flusso di rete verso il server aperto chiamando connection.getinputstream(), come mostrato di seguito: stream = connection.getinputstream(); Inizia quindi il centro dell azione con un ciclo while: while (status == DOWNLOADING) { /* Dimensiona il buffer secondo la quantità di file restata da scaricare. */ byte buffer[]; if (size - downloaded > MAX_BUFFER_SIZE) { buffer = new byte[max_buffer_size]; else { buffer = new byte[size - downloaded]; // Legge dal server nel buffer. int read = stream.read(buffer); if (read == -1) break; // Scrive il buffer nel file. file.write(buffer, 0, read); downloaded += read; statechanged();

11 Creazione di un download manager in Java 49 Il ciclo viene impostato per essere eseguito fino a quando la variabile status è diversa da DOWNLOADING. Nel ciclo si crea un array di buffer byte per contenere i byte da scaricare. Il buffer è dimensionato secondo la quantità di download restante per il completamento. Se si deve scaricare una quantità di byte maggiore di MAX_BUFFER_SIZE, per dimensionare il buffer si utilizza MAX_BUFFER_ SIZE, altrimenti il buffer viene dimensionato sul numero di byte ancora da scaricare. Quando il buffer è stato dimensionato correttamente, ha luogo il download con una chiamata a stream.read(). La chiamata legge byte dal server e li inserisce nel buffer, restituendo il conteggio dei byte effettivamente letti. Se il numero di byte letti è uguale a -1, il download è completo e si esce dal ciclo, altrimenti il download non è terminato e i byte letti vengono scritti su disco con una chiamata a file.write(). Quindi si aggiorna la variabile downloaded, in modo da riflettere il numero di byte scaricati. Infine, all interno del ciclo, si chiama il metodo state- Changed(). Ulteriori dettagli più avanti. Dopo l uscita dal ciclo, il codice di seguito controlla perché si è usciti dal ciclo: /* Cambia lo stato in completo se questo punto è stato raggiunto perché è finito il download. */ if (status == DOWNLOADING) { status = COMPLETE; statechanged(); Se lo stato del download è ancora DOWNLOADING, significa che si è usciti dal ciclo perché il download è stato completato, altrimenti si è usciti dal ciclo perché è cambiato lo stato del download in un valore diverso da DOWNLOADING. Il metodo run() finisce con i blocchi catch e finally mostrati di seguito: catch (Exception e) { error(); finally { // Chiude il file. if (file!= null) { try { file.close(); catch (Exception e) { // Chiude la connessine al server. if (stream!= null) { try { stream.close(); catch (Exception e) { PARTE IV Se durante il processo di scaricamento viene lanciata un eccezione, il blocco catch rileva l eccezione e chiama il metodo error(). Il blocco finally garantisce che

12 50 Capitolo 34 se le connessioni file e stream sono state aperte, vengano chiuse, che sia stata lanciata un eccezione o no. Come esercizio, si può provare a modificare il codice in modo da utilizzare la nuova dichiarazione try con risorse per gestire tali risorse. Il metodo statechanged() Affinché il Download Manager visualizzi informazioni aggiornate sui download che gestisce, deve sapere quando cambiano le informazioni su un download. Per gestire tale situazione si utilizza lo schema di design Observer. Lo schema Observer è analogo a una mailing list di annunci in cui le persone si registrano per ricevere annunci. Ogni volta che esiste un nuovo annuncio, tutte le persone nell elenco ricevono un messaggio con l annuncio. Nel caso dello schema Observer esiste una classe osservata presso cui le classi osservatrici possono registrarsi per ricevere notifiche di modifiche. La classe Download utilizza lo schema Observer estendendo la classe di utility incorporata Observable di Java. L estensione della classe Observable consente alle classi che implementano l interfaccia Observer di Java di registrarsi presso la classe Download per ricevere notifiche di modifiche. Ogni volta che la classe Download deve notificare un cambiamento agli Observer registrati, viene chiamato il metodo statechanged(). Il metodo statechanged() chiama prima il metodo setchanged() della classe Observable per contrassegnare la classe come modificata. Quindi il metodo statechanged() chiama il metodo notifyobservers() di Observable, che trasmette la notifica di cambiamento agli Observer registrati. Metodi di azione e accessori La classe Download dispone di numerosi metodi di azione e accessori per controllare un download e ottenere dati da esso. Ogni metodo di azione pause(), resume() e cancel() fa semplicemente ciò che implica il nome: ferma, riprende o annulla il download, rispettivamente. Analogamente, il metodo error() contrassegna il download come con un errore. I metodi accessori geturl(), getsize(), getprogress() e getstatus() restituiscono i rispettivi valori correnti La classe ProgressRenderer La classe ProgressRenderer è una piccola classe di utility utilizzata per visualizzare l avanzamento corrente di un download elencato nell istanza JTable Downloads della GUI. Normalmente un istanza JTable visualizza i dati di ogni cella come testo. Tuttavia, spesso è particolarmente utile visualizzare i dati di una cella in modo diverso dal testo. Nel caso del Download Manager si desidera visualizzare ogni cella della colonna Progress della tabella come una barra di avanzamento. La classe ProgressRenderer mostrata di seguito lo rende possibile. Si noti che estende JProgressBar e implementa TableCellRenderer. import java.awt.*; import javax.swing.*; import javax.swing.table.*; // Questa classe visualizza una JProgressBar in una cella in tabella.

13 Creazione di un download manager in Java 51 class ProgressRenderer extends JProgressBar implements TableCellRenderer { // Costruttore per ProgressRenderer. public ProgressRenderer(int min, int max) { super(min, max); /* Restituisce questa JProgressBar come visualizzatore per la cella di tabella data. */ public Component gettablecellrenderercomponent( JTable table, Object value, boolean isselected, boolean hasfocus, int row, int column) { // Imposta il valore di completamento in percentuale di JProgressBar. setvalue((int) ((Float) value).floatvalue()); return this; La classe ProgressRenderer sfrutta il fatto che la classe JTable di Swing ha un sistema di rendering in grado di accettare plug-in per la visualizzazione di celle di tabella. Per inserire tale sistema di rendering, la classe ProgressRenderer deve implementare l interfaccia TableCellRenderer di Swing. Quindi è necessario registrare un istanza di ProgressRenderer presso un istanza di JTable; in tal modo indica all istanza JTable quali celle deve visualizzare con il plug-in. L implementazione dell interfaccia TableCellRenderer richiede che la classe ridefinisca il metodo gettablecellrenderercomponent(), chiamato ogni volta che un istanza JTable deve visualizzare una cella per cui la classe è stata registrata. Al metodo si passano numerose variabili, ma in questo caso si utilizza solo la variabile value, che contiene i dati per la cella da visualizzare e viene passata al metodo setvalue() di JProgressBar. Il metodo gettablecellrenderercomponent() termina restituendo un riferimento alla relativa classe. Funziona perché la classe ProgressRenderer è una sottoclasse di JProgressBar, discendente della classe AWT Component. PARTE IV 34.6 La classe DownloadsTableModel La classe DownloadsTableModel contiene l elenco di download del Download Manager ed è l origine di dati che supporta l istanza di JTable Downloads della GUI. La classe DownloadsTableModel è mostrata di seguito. Si noti che estende AbstractTableModel e implementa l interfaccia Observer. import java.util.*; import javax.swing.*; import javax.swing.table.*;

14 52 Capitolo 34 // Questa classe gestisce i dati della tabella di download. class DownloadsTableModel extends AbstractTableModel implements Observer { // Questi sono i nomi delle colonne della tabella. private static final String[] columnnames = { URL, Size, Progress, Status ; // Queste sono le classi per i valori di ogni colonna. private static final Class[] columnclasses = {String.class, String.class, JProgressBar.class, String.class; // L elenco di download della tabella. private ArrayList<Download> downloadlist = new ArrayList<Download>(); // Aggiunge un nuovo download alla tabella. public void adddownload(download download) { // Si registra per essere avvisto quando cambia il download. download.addobserver(this); downloadlist.add(download); 1); // Invia alla tabella notifica di inserimento di riga. firetablerowsinserted(getrowcount() - 1, getrowcount()- // Ottiene un download per la riga specificata. public Download getdownload(int row) { return downloadlist.get(row); // Elimina un download dall elenco. public void cleardownload(int row) { downloadlist.remove(row); // Invia alla tabella notifica di eliminazione di riga. firetablerowsdeleted(row, row); // Ottiene conteggio di colonne della tabella. public int getcolumncount() { return columnnames.length; // Ottiene il nome di una colonna. public String getcolumnname(int col) {

15 Creazione di un download manager in Java 53 return columnnames[col]; // Ottiene la classe di una colonna. public Class<?> getcolumnclass(int col) { return columnclasses[col]; // Ottiene conteggio di righe della tabella. public int getrowcount() { return downloadlist.size(); // Ottiene valore per una combinazione specifica di riga e di colonna. public Object getvalueat(int row, int col) { Download download = downloadlist.get(row); switch (col) { case 0: // URL return download.geturl(); case 1: // Dimensioni int size = download.getsize(); return (size == -1)? : Integer.toString(size); case 2: // Avanzamento return new Float(download.getProgress()); case 3: // Stato return Download.STATUSES[download.getStatus()]; return ; /* Update viene chiamato quando un Download informa i suoi osservatori di modifiche */ public void update(observable o, Object arg) { int index = downloadlist.indexof(o); PARTE IV // Invia alla tabella notifica di aggiornamento di riga. firetablerowsupdated(index, index); In sostanza la classe DownloadsTableModel è una classe di utility utilizzata dall istanza JTable Downloads per gestire i dati nella tabella. Quando si inizializza l istanza JTable, si passa un istanza DownloadsTableModel. JTable chiama quindi numerosi metodi sull istanza DownloadsTableModel per la compilazione della tabella. Il metodo getcolumncount() viene chiamato per recuperare il numero di colonne nella tabella. Analogamente, getrowcount() è utilizzato per recuperare il numero di righe nella tabella. Il metodo getcolumnname() restituisce il nome di una colonna dato l ID. Il metodo getdownload() prende un ID

16 54 Capitolo 34 di riga e restituisce l oggetto Download associato dall elenco. Gli altri metodi della classe DownloadsTableModel, più complessi, sono descritti in dettaglio nei paragrafi successivi. Il metodo adddownload() Il metodo adddownload(), mostrato di seguito, aggiunge un nuovo oggetto Download all elenco di download gestiti, quindi aggiunge una riga nella tabella: // Aggiunge un nuovo download alla tabella. public void adddownload(download download) { // Si registra per essere avvisto quando cambia il download. download.addobserver(this); downloadlist.add(download); // Invia alla tabella notifica di inserimento di riga. firetablerowsinserted(getrowcount() - 1, getrowcount() - 1); Il metodo si registra presso il nuovo Download come Observer interessato a ricevere notifiche di cambiamenti. Quindi il Download viene aggiunto all elenco interno di download gestiti. Infine viene inviata una notifica di evento di inserimento di riga nella tabella per indicare alla tabella che è stata aggiunta una nuova riga. Il metodo cleardownload() Il metodo cleardownload(), mostrato di seguito, elimina un Download dall elenco di download gestiti: // Elimina un download dall elenco. public void cleardownload(int row) { downloadlist.remove(row); // Invia alla tabella notifica di eliminazione di riga. firetablerowsdeleted(row, row); Dopo avere eliminato il Download dall elenco interno, viene inviata una notifica di eliminazione di riga di tabella per indicare alla tabella che è stata eliminata una riga. Il metodo getcolumnclass() Il metodo getcolumnclass(), mostrato di seguito, restituisce il tipo di classe per i dati visualizzati nella colonna specificata: // Ottiene la classe di una colonna. public Class<?> getcolumnclass(int col) { return columnclasses[col];

17 Creazione di un download manager in Java 55 Tutte le colonne sono visualizzate come testo (vale a dire oggetti String) ad eccezione della colonna Progress, visualizzata come barra di avanzamento (un oggetto di tipo JProgressBar). Il metodo getvalueat() Il metodo getvalueat(), mostrato di seguito, viene chiamato per ottenere il valore corrente da visualizzare per ogni cella della tabella: // Ottiene valore per una combinazione specifica di riga e di colonna. public Object getvalueat(int row, int col) { Download download = downloadlist.get(row); switch (col) { case 0: // URL return download.geturl(); case 1: // Dimensioni int size = download.getsize(); return (size == -1)? : Integer.toString(size); case 2: // Avanzamento return new Float(download.getProgress()); case 3: // Stato return Download.STATUSES[download.getStatus()]; return ; Il metodo prima cerca il Download corrispondente alla riga specificata, quindi si utilizza la colonna specificata per determinare quale valore delle proprietà di Download restituire. Il metodo update() Il metodo update() è mostrato di seguito. Adempie al contratto con l interfaccia Observer consentendo alla classe DownloadsTableModel di ricevere notifiche dagli oggetti Download quando cambiano. PARTE IV /* Update viene chiamato quando un Download informa i suoi osservatori di modifiche */ public void update(observable o, Object arg) { int index = downloadlist.indexof(o); // Invia alla tabella notifica di aggiornamento di riga. firetablerowsupdated(index, index); Al metodo si passa un riferimento al Download cambiato, sotto forma di oggetto Observable. Quindi si cerca un indice verso tale download nell elenco dei download e si utilizza tale indice per inviare una notifica di evento di aggiornamento di riga di tabella, che indica alla tabella che la riga data è stata modificata. La tabella visualizza la riga con l indice dato, riflettendo i nuovi valori.

18 56 Capitolo La classe DownloadManager Gettate le basi con la spiegazione di tutte le classi helper del Download Manager, è possibile esaminare la classe DownloadManager, responsabile della creazione e dell esecuzione della GUI del Download Manager. La classe dispone di un metodo main(), il primo dichiarato durante l esecuzione. Il metodo main() crea una nuova istanza della classe DownloadManager e chiama il relativo metodo show(), che la visualizza. La classe DownloadManager è mostrata di seguito. Si noti che estende JFrame e implementa Observer. I paragrafi di seguito la esaminano in dettaglio. import java.awt.*; import java.awt.event.*; import java.net.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; // Il Download Manager. public class DownloadManager extends JFrame implements Observer { // Aggiunge i campi di testo per i download. private JTextField addtextfield; // Il modello di dati della tabella di download. private DownloadsTableModel tablemodel; // Tabella che elenca i download. private JTable table; // Questi sono i pulsanti per la gestione del download selezionato. private JButton pausebutton, resumebutton; private JButton cancelbutton, clearbutton; // Download selezionato. private Download selecteddownload; // Flag per sapere se la selezione di tabella deve essere annullata. private boolean clearing; // Costruttore per Download Manager. public DownloadManager() { // Imposta titolo dell applicazione. settitle( Download Manager );

19 Creazione di un download manager in Java 57 // Imposta dimensioni della finestra. setsize(640, 480); // Gestisce eventi di chiusura della finestra. addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { actionexit(); ); // Imposta il menu di file. JMenuBar menubar = new JMenuBar(); JMenu filemenu = new JMenu( File ); filemenu.setmnemonic(keyevent.vk_f); JMenuItem fileexitmenuitem = new JMenuItem( Exit, KeyEvent.VK_X); fileexitmenuitem.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { actionexit(); ); filemenu.add(fileexitmenuitem); menubar.add(filemenu); setjmenubar(menubar); // Imposta pannello di aggiunta. JPanel addpanel = new JPanel(); addtextfield = new JTextField(30); addpanel.add(addtextfield); JButton addbutton = new JButton( Add Download ); addbutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { actionadd(); ); addpanel.add(addbutton); PARTE IV // Imposta tabella di download. tablemodel = new DownloadsTableModel(); table = new JTable(tableModel); table.getselectionmodel().addlistselectionlistener(new ListSelectionListener() { public void valuechanged(listselectionevent e) { tableselectionchanged(); ); // Consente di selezionare una sola riga per volta. table.setselectionmode(listselectionmodel.single_selec- TION);

20 58 Capitolo 34 // Imposta ProgressBar come visualizzatore per colonna di avanzamento. ProgressRenderer renderer = new ProgressRenderer(0, 100); renderer.setstringpainted(true); // mostra testo avanzamento table.setdefaultrenderer(jprogressbar.class, renderer); // Imposta altezza riga di tabella sufficiente per contenere JProgressBar. table.setrowheight( (int) renderer.getpreferredsize().getheight()); // Imposta pannello di download. JPanel downloadspanel = new JPanel(); downloadspanel.setborder( BorderFactory.createTitledBorder( Downloads )); downloadspanel.setlayout(new BorderLayout()); downloadspanel.add(new JScrollPane(table), BorderLayout.CENTER); // Imposta pannello di pulsanti. JPanel buttonspanel = new JPanel(); pausebutton = new JButton( Pause ); pausebutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { actionpause(); ); pausebutton.setenabled(false); buttonspanel.add(pausebutton); resumebutton = new JButton( Resume ); resumebutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { actionresume(); ); resumebutton.setenabled(false); buttonspanel.add(resumebutton); cancelbutton = new JButton( Cancel ); cancelbutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { actioncancel(); ); cancelbutton.setenabled(false); buttonspanel.add(cancelbutton); clearbutton = new JButton( Clear ); clearbutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { actionclear();

UN CLONE IN CLIKE C-LIKE DI SEGUIVISIONE

UN CLONE IN CLIKE C-LIKE DI SEGUIVISIONE IDROID 86 LAB pagg 12-13 23-04-2007 14:57 Pagina 12 I-D01 LAB UN CLONE IN CLIKE C-LIKE DI SEGUIVISIONE PROGRAMMAZIONE Alcuni comportamenti predefiniti attivabili su I-Droid01 sono facilmente riproducibili

Dettagli

Finestra.java. static String nomicolonne[] = {"ind.","cognome","nome","telefono","e-mail"}; //nomi delle colonne della tabella

Finestra.java. static String nomicolonne[] = {ind.,cognome,nome,telefono,e-mail}; //nomi delle colonne della tabella import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.windowevent; import java.awt.event.windowlistener; import java.io.*; import java.util.*;

Dettagli

Classi astratte. Master in Web Technology e Security luglio - settembre 2000. Interfacce

Classi astratte. Master in Web Technology e Security luglio - settembre 2000. Interfacce Master in Web Technology e Security luglio - settembre 2000 JAVA Alberto Martelli Parte III Programmazione grafica Classi astratte Vogliamo implementare un algoritmo di ordinamento di un array che sia

Dettagli

L interfaccia grafica con Java

L interfaccia grafica con Java L interfaccia grafica con Java 1/24 L interfaccia utente serve per la comunicazione tra utente e programma Distinguiamo le interfacce tra quelle a caratteri e quelle grafiche Le GUI (Graphical user interface)

Dettagli

Java Applet. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010

Java Applet. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Java Applet 1 Application VS Applet Una

Dettagli

APPLICAZIONI & APPLET

APPLICAZIONI & APPLET APPLICAZIONI & APPLET Java è un ottimo linguaggio per costruire applicazioni anche non per Internet anche non grafiche ma si è diffuso storicamente, e trae forza, dal concetto di applet come piccola (?)

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA5 B1 Gestione eventi 1 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti AWT o Swing Programmazione ad eventi 2 1 Introduzione Le interfacce create

Dettagli

TECNOLOGIE APPLICAZIONI WEB Linguaggio Java: Le Applet

TECNOLOGIE APPLICAZIONI WEB Linguaggio Java: Le Applet Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE APPLICAZIONI WEB Linguaggio Java: Le Applet Prof. Franco Zambonelli Lucidi realizzati in collaborazione

Dettagli

L interfaccia grafica in Java

L interfaccia grafica in Java L interfaccia grafica in Java Java possiede due package per la creazione di interfacce grafiche java.awt javax.swing AWT (Abstract Widget Toolkit) presente già in Java 1.0, migliorato in Java 1.1. Invariato

Dettagli

Progettare un'applicazione di tipo GUI con tre menu e voci di menu (come nelle figure sottostanti):

Progettare un'applicazione di tipo GUI con tre menu e voci di menu (come nelle figure sottostanti): Progettare un'applicazione di tipo GUI con tre menu e voci di menu (come nelle figure sottostanti): All'attivazione della voce Apri del menu File corrisponde la possibilità di aprire un file scelto con

Dettagli

Interazioni col mondo: eventi

Interazioni col mondo: eventi Interazioni col mondo: eventi Le interazioni di una GUI con il mondo esterno sono segnalate tramite eventi: click del mouse, inserimento di testo, selezione/attivazione... Gli eventi che memorizzano queste

Dettagli

Alessandro De Luca. Lezione, 13 maggio 2015

Alessandro De Luca. Lezione, 13 maggio 2015 Basi Basi di di dati dati ee sistemi sistemi informativi informativi II mod.laboratorio mod.laboratorio Alessandro De Luca Università degli Studi di Napoli Federico II Lezione, Introduzione a Java Swing

Dettagli

Eventi di azione. // con interfaccia per eventi di azione

Eventi di azione. // con interfaccia per eventi di azione Eventi di azione (Interfaces ActionListener, Classes ActionEvent) Sono generati quando si premono bottoni, si selezionano voci di menù, si preme invio mentre si scrive in un campo di testo. In awt sono

Dettagli

L applicazione di MVC alla simulazione di ascensore I COMPONENTI DELLE INTERFACCE UTENTE GRAFICHE: PARTE II 1

L applicazione di MVC alla simulazione di ascensore I COMPONENTI DELLE INTERFACCE UTENTE GRAFICHE: PARTE II 1 I COMPONENTI DELLE INTERFACCE UTENTE GRAFICHE: PARTE II 1 3.13 (Caso di studio facoltativo) Pensare a oggetti: Modello-Vista-Controllore I design pattern descrivono strategie efficaci per costruire sistemi

Dettagli

Synchronized (ancora)

Synchronized (ancora) Synchronized (ancora) Riscriviamo l esempio di prima. Usiamo una struttura modulare, con una classe Notificatore che ha opportuni metodi. La classe ha due campi privati, la lista buftext e un suo thread.

Dettagli

Sviluppo di Interfacce Grafiche in Java

Sviluppo di Interfacce Grafiche in Java Sviluppo di Interfacce Grafiche in Java Massimiliano de Leoni (con la supervisione del docente Massimo Mecella) Università di Roma La Sapienza - Sede di Latina Corso di Progettazione del Software A.A.

Dettagli

Architettura Client-Server

Architettura Client-Server Architettura Client-Server 1. il client manda una richiesta al server 2. il server (in attesa) riceve la richiesta 3. il server esegue il servizio richiesto (generando un thread concorrente) 4. il server

Dettagli

Design Pattern in Java

Design Pattern in Java Design Pattern in Java Claudio Di Ciccio, Massimiliano de Leoni (con la supervisione del docente Massimo Mecella) Università di Roma La Sapienza - Sede di Latina Corso di Progettazione del Software A.A.

Dettagli

appunti delle lezioni Architetture client/server: applicazioni client

appunti delle lezioni Architetture client/server: applicazioni client Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/server: applicazioni client 1 Architetture client/server: un esempio World wide web è un esempio particolarmente

Dettagli

Grafico della parabola

Grafico della parabola Grafico della parabola Il grafico matematico è un disegno che mostra l andamento di una funzione f(x) al variare della variabile x. Per tracciare un grafico sul video del computer, si deve scegliere un

Dettagli

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi Linguaggio Java Robusto Non permette costrutti pericolosi Eredità Multipla Gestione della Memoria Orientato agli oggetti Ogni cosa ha un tipo Ogni tipo è un oggetto (quasi) Protegge e gestisce dagli errori

Dettagli

R.Focardi Laboratorio di Ingegneria del Software 6. 1

R.Focardi Laboratorio di Ingegneria del Software 6. 1 Networking Java permette comunicazioni in rete basate sul concetto di socket, che permette di vedere la comunicazione in termini di flusso (stream), in modo analogo all input-output di file, usando Stream

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA1 1.3 - Le strutture di controllo 1 Prerequisiti Istruzioni semplici Strutture di controllo Scittura di semplici applicazioni Java 2 1 Introduzione In molti casi le

Dettagli

20 - Input/Output su File

20 - Input/Output su File 20 - Input/Output su File Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

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:

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: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

RMI: metodi equals e hashcode

RMI: metodi equals e hashcode RMI: metodi equals e hashcode Per verificare se due oggetti remoti contengono gli stessi dati, la chiamata indirizzata al metodo equals() avrebbe bisogno di contattare i server dove si trovano gli oggetti

Dettagli

Prova d Esame 07.04.2006 Compito A

Prova d Esame 07.04.2006 Compito A DOMANDA 1 (6 punti) Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { public static String s1 = "Ciao"; protected int n; public General() { n = 1; public

Dettagli

Programmazione Java: Interfacce grafiche (GUI)

Programmazione Java: Interfacce grafiche (GUI) Programmazione Java: Interfacce grafiche (GUI) romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp ( 1 ) (GUI) Interfacce grafiche Rendere facili le cose semplici e possibili le cose difficili

Dettagli

Prova d Esame 07.04.2006 Compito B

Prova d Esame 07.04.2006 Compito B DOMANDA 1 (6 punti) Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { public static String s1 = "ciao"; protected int n; public General() { n = 3; public

Dettagli

10.7 La classe BitSet... 555 Esercizi di autovalutazione... 558 Risposte agli esercizi di autovalutazione... 559 Esercizi 559

10.7 La classe BitSet... 555 Esercizi di autovalutazione... 558 Risposte agli esercizi di autovalutazione... 559 Esercizi 559 Sommario PREFAZIONE... XI Il nostro approccio didattico... xi Una panoramica del libro... xiv Ringraziamenti... xvii Gli autori... xix Deitel & Associates, Inc.... xx CAPITOLO 1 LA GRAFICA E JAVA2D...

Dettagli

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell Tecnologie Web L-A Java e HTTP Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi Java e TCP/IP in a Nutshell! java.net.inetaddress: rappresenta un indirizzo IP e

Dettagli

19. Introduzione al multi-threading

19. Introduzione al multi-threading 19. Introduzione al multi-threading Marco Faella Dip. Ing. Elettrica e Tecnologie dell'informazione Università di Napoli Federico II Corso di Linguaggi di Programmazione II I thread I thread, o processi

Dettagli

Java threads (2) Programmazione Concorrente

Java threads (2) Programmazione Concorrente Java threads (2) emanuele lattanzi isti information science and technology institute 1/28 Programmazione Concorrente Utilizzo corretto dei thread in Java emanuele lattanzi isti information science and

Dettagli

Applicazioni web. Parte 5 Socket

Applicazioni web. Parte 5 Socket Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Applicazioni web Parte 5 Michele Tomaiuolo tomamic@ce.unipr.it Protocolli Internet I computer

Dettagli

INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE

INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE La Gestione degli Eventi Ogni oggetto grafico è predisposto ad essere sollecitato in qualche modo dall utente (per esempio un pulsante può essere premuto).

Dettagli

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

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Esercitazioni di PROGETTAZIONE DEL SOFTWARE (Corsi di Laurea in Ingegneria Informatica ed Automatica ed Ingegneria

Dettagli

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio QUEUE : considerazioni QUEUE : considerazioni Si è realizzata una struttura dati complessa utilizzandone una primitiva, l array. Il pregio di tale implementazione è il basso costo computazionale, mentre

Dettagli

Java: la libreria delle classi

Java: la libreria delle classi Java: la libreria delle classi Applet anatomia di un applet cenni di html La libreria JDBC per l accesso ai database il package java.sql 213 Applet Un applet è una applicazione Java che ha una forma particolare

Dettagli

Gestione delle eccezioni in Java

Gestione delle eccezioni in Java Gestione delle eccezioni in Java - Introduzione al concetto di eccezioni E possibile definire un eccezione come un situazione imprevista che il flusso di un applicazione può incontrare. È possibile gestire

Dettagli

23 - Graphical User Interface GUI (Cenni)

23 - Graphical User Interface GUI (Cenni) 23 - Graphical User Interface GUI (Cenni) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo

Dettagli

Introduzione al package grafico Swing

Introduzione al package grafico Swing Introduzione al package grafico Swing Architettura di javax.swing Java supporta direttamente nella propria architettura il concetto di applicazione grafica, tramite il package javax.swing, in cui i componenti

Dettagli

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del

Dettagli

Gestione delle Eccezioni

Gestione delle Eccezioni Gestione delle Eccezioni Condizioni di Errore Una condizione di errore in un programma può avere molte cause Errori di programmazione Divisione per zero, cast non permesso, accesso oltre i limiti di un

Dettagli

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.

Dettagli

Connessioni di rete. Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi. PdR_09010 - Stefano Millozzi

Connessioni di rete. Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi. PdR_09010 - Stefano Millozzi Connessioni di rete Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi 1 Socket orientato alla connessione o non orientato alla connessione 2 Socket in astratto 3 Socket modalità

Dettagli

Parte II: Reti di calcolatori Lezione 10

Parte II: Reti di calcolatori Lezione 10 Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Parte II: Reti di calcolatori Lezione 10 Giovedì 3-04-2014 1 Reti per la distribuzione

Dettagli

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB.

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB Java Applet Ing. Marco Mamei Anno Accademico 2004-2005 M. Mamei - Tecnologie

Dettagli

Scope e visibilità per classi

Scope e visibilità per classi Scope e visibilità per classi Packages Classi interne nelle loro diverse forme Interne / statiche / locali Utilizzo congiunto con interfacce Implementazione di iteratori Gestione di eventi Packages Package:

Dettagli

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata. Chat Si ha un server in ascolto sulla porta 4444 Quando un client richiede la connessione, il server risponde con: Connessione accettata. Nome: Il client deve rispondere con lo user name A questo punto

Dettagli

Esercitazione sui Design Pattern

Esercitazione sui Design Pattern Esercitazione sui Design Pattern Pattern Creazionali Singleton Permette la creazione di una sola istanza della classe all interno dell applicazione Fornisce un metodo con cui ottenere l istanza Il costruttore

Dettagli

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB Http con java, URL Ing. Marco Mamei Anno Accademico 2004-2005 M. Mamei - Tecnologie

Dettagli

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind() Organizzazione della lezione Lezione 18 Remote Method Invocation - 6 Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di Salerno

Dettagli

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2)

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2) Gestione di errori e situazioni eccezionali Gestione delle eccezioni Una procedura (utente o di libreria) deve poter segnalare l impossibilità di produrre un risultato significativo o la propria terminazione

Dettagli

La velocità di una carovana

La velocità di una carovana Programmazione A.A. 2002-03 I linguaggio Java ( Lezione X, Parte I ) Il primo programma Prof. Giovanni Gallo Dr. Gianluca Cincotti Dipartimento di Matematica e Informatica Università di Catania e-mail

Dettagli

Thread e Concorrenza in Java Swing

Thread e Concorrenza in Java Swing Thread e Concorrenza in Java Swing Esercitazioni di Progettazione del Software A.A. 2013 2014 Alessandro Russo Sapienza Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Dettagli

Interfacce grafiche. Una GUI (Graphic User Interface) contiene vari componenti: bottoni, etichette, immagini...

Interfacce grafiche. Una GUI (Graphic User Interface) contiene vari componenti: bottoni, etichette, immagini... Interfacce grafiche Una GUI (Graphic User Interface) contiene vari componenti: bottoni, etichette, immagini... Alcuni componenti ne contengono altri (ad esempio le finestre), e sono detti contenitori.

Dettagli

Programmazione di rete in Java

Programmazione di rete in Java Programmazione di rete in Java Reti di calcolatori Una rete di calcolatori è un sistema che permette la condivisione di dati informativi e risorse (sia hardware sia software) tra diversi calcolatori. Lo

Dettagli

Corso Eclipse. Prerequisiti. 3 Window Builder

Corso Eclipse. Prerequisiti. 3 Window Builder Corso Eclipse 3 Window Builder 1 Prerequisiti Conoscenza elementare ambiente Eclipse Conoscere la nomenclatura dei componenti delle interfacce grafiche Conoscere attributi e metodi dei principali componenti

Dettagli

Corso di Reti di Calcolatori. java.net.url

Corso di Reti di Calcolatori. java.net.url Corso di Reti di Calcolatori UNICAL Facoltà di Ingegneria a.a. 2002/2003 Esercitazione sul networking in Java (2 a parte) paolo.trunfio@deis.unical.it 1 java.net.url URL (String spec) crea un oggetto URL

Dettagli

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

Autore: Prof. Agostino Sorbara ITIS M. M. Milano Polistena (RC) In questa lezione introduciamo alcuni strumenti che Java rende disponibili per la creazione di interfacce utente a manipolazione diretta, dette anche WYSISYG (what you see is what you get), con un elevato

Dettagli

ESERCITAZIONI SU Java

ESERCITAZIONI SU Java ESERCITAZIONI SU Java PER IL CORSO DI SISTEMI PER L ELABORAZIONE DELL INFORMAZIONE Claudia Picardi Dipartimento di Informatica - C.so Svizzera 185-10149 - Torino Tel. 0116706818 - e-mail: picardi@di.unito.it

Dettagli

I Canvas. import java.awt.*; import javax.swing.*; public class Graf{ public Graf () { JFrame f = new JFrame("Finestra"); // crea frame invisibile

I Canvas. import java.awt.*; import javax.swing.*; public class Graf{ public Graf () { JFrame f = new JFrame(Finestra); // crea frame invisibile I Canvas Tra i vari contenitori Java il Canvas (area di disegno o tela) è una semplice superficie di disegno particolarmente utile per visualizzare immagini o per effettuare altre operazioni grafiche.

Dettagli

Gestione degli eventi in Java

Gestione degli eventi in Java Gestione degli eventi in Java package java.awt.event.* Il modello degli eventi I componenti dell awt generano eventi in seguito alle azioni dell utente movimento del mouse click pressione di un tasto etc.

Dettagli

Parte II: Reti di calcolatori Lezione 12

Parte II: Reti di calcolatori Lezione 12 Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15 Parte II: Reti di calcolatori Lezione 12 Giovedì 16-04-2015 1 Confronto architetture C/S e

Dettagli

10.4. La classe File e gli attributi di directory e file

10.4. La classe File e gli attributi di directory e file pag.143 10.4. La classe File e gli attributi di directory e file Questa classe, molto utile per operare con i file su disco, consente di accedere alle directory, verificare e acquisire le caratteristiche

Dettagli

LPR 2005/ 2006 Lezione n.9. Elementi di grafica per lo svolgimento del progetto Double Buffering Caricamento delle immagini Gestione degli eventi

LPR 2005/ 2006 Lezione n.9. Elementi di grafica per lo svolgimento del progetto Double Buffering Caricamento delle immagini Gestione degli eventi LPR 2005/ 2006 Lezione n.9 Elementi di grafica per lo svolgimento del progetto Double Buffering Caricamento delle immagini Gestione degli eventi JAVA 2D PROGRAMMING Schermo : Matrice rettangolare composta

Dettagli

interfacce ed eventi intercettare il mouse ed altri eventi

interfacce ed eventi intercettare il mouse ed altri eventi interfacce ed eventi intercettare il mouse ed altri eventi interfacce: premessa il termine "interfaccia" occorre in Java con due significati, collegati ma distinti 1. interface, parola chiave di Java e

Dettagli

Unità B3 Strutture di controllo

Unità B3 Strutture di controllo (A) CONOSCENZA TERMINOLOGICA Dare una breve descrizione dei termini introdotti: I/O su console Package Blocco di controllo Oggetto System.out Oggetto System.in Oggetto Tastiera Metodo readline() Strutture

Dettagli

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

Le basi della grafica in Java. Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni Le basi della grafica in Java Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni Elaborazione classica o imperativa L elaborazione è concentrata nel momento centrale, durante

Dettagli

RMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it

RMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it Java Remote Method Invocation -- RMI G. Prencipe prencipe@di.unipi.it RMI RMI è una tecnologia JAVA che permette a una JVM di comunicare con un altra JVM per farle eseguire metodi È possibile che oggetti

Dettagli

ESAME DI FONDAMENTI DI INFORMATICA T-2 del 15/07/2015 Proff. E. Denti G. Zannoni Tempo a disposizione: 4 ore MAX

ESAME DI FONDAMENTI DI INFORMATICA T-2 del 15/07/2015 Proff. E. Denti G. Zannoni Tempo a disposizione: 4 ore MAX ESAME DI FONDAMENTI DI INFORMATICA T-2 del 15/07/2015 Proff. E. Denti G. Zannoni Tempo a disposizione: 4 ore MAX NB: il candidato troverà nell archivio ZIP scaricato da Esamix anche il software Start Kit

Dettagli

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

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica lezione del 30 maggio 2014 Introduzione Un programma diviso in sezioni distinte Un approccio alla

Dettagli

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

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); } import java.util.*; class coda * Questa classe contiene tutti i metodi per la gestione della coda * @author D'Ambrosio Giovanni Classe 4D I.T.I.S. Grottaminarda * @version 26/02/2010 * VETTORE DINAMICO

Dettagli

Threads e Concorrenza in Java Swing

Threads e Concorrenza in Java Swing SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Corso di Laurea in Ingegneria Informatica ed Automatica Corso di Laurea in Ingegneria dei Sistemi Informatici

Dettagli

COGNOME.NOME. Matricola

COGNOME.NOME. Matricola Esame di PROGRAMMAZIONE ORIENTATA AGLI OGGETTI Appello del 4.9.2013 COGNOME.NOME. Matricola Tre classi, denominate Anemone, Fiordaliso e Viola devono assicurare la visualizzazione di un fiore stilizzato

Dettagli

Uso di un browser (con riferimento a Microsoft Internet Explorer 7.0)

Uso di un browser (con riferimento a Microsoft Internet Explorer 7.0) Uso di un browser (con riferimento a Microsoft Internet Explorer 7.0) Nota Bene: Si raccomanda di leggere queste dispense di fronte al computer, provando passo dopo passo le funzionalità descritte. Per

Dettagli

Prova di informatica & Laboratorio di Informatica di Base

Prova di informatica & Laboratorio di Informatica di Base Prova di informatica & Laboratorio di Informatica di Base Prof. Orlando De Pietro Programma L' hardware Computer multiutente e personal computer Architettura convenzionale di un calcolatore L unità centrale

Dettagli

Corso Eclipse. Prerequisiti. 1 Introduzione

Corso Eclipse. Prerequisiti. 1 Introduzione Corso Eclipse 1 Introduzione 1 Prerequisiti Uso elementare del pc Esecuzione ricerche su Internet Esecuzione download Conoscenza elementare della programmazione 2 1 Cos è Eclipse Eclipse è un IDE (Integrated

Dettagli

Introduzione al linguaggio Java. Applicazioni ed Applets: come scriverli e farli girare. Caratteristiche originali e differenze con C / C++.

Introduzione al linguaggio Java. Applicazioni ed Applets: come scriverli e farli girare. Caratteristiche originali e differenze con C / C++. Introduzione al linguaggio Java Cosa c è di nuovo in Java? Java ed Internet. Applicazioni ed Applets: come scriverli e farli girare. Caratteristiche originali e differenze con C / C++. Dove trovare informazioni?

Dettagli

! Programmazione strutturata. ! OO: TDA, scambio messaggi, eredità, polimorfismo, OO in Java. ! Rassegna API. ! Documentazione Javadoc delle API

! Programmazione strutturata. ! OO: TDA, scambio messaggi, eredità, polimorfismo, OO in Java. ! Rassegna API. ! Documentazione Javadoc delle API Riassunto Applet (e altro dell AWT ) Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 22 19 maggio

Dettagli

Uso di un browser (con riferimento a Microsoft Internet Explorer 6.0)

Uso di un browser (con riferimento a Microsoft Internet Explorer 6.0) Uso di un browser (con riferimento a Microsoft Internet Explorer 6.0) Nota Bene: Si raccomanda di leggere queste dispense di fronte al computer, provando passo dopo passo le funzionalità descritte. Per

Dettagli

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144 Mobilità di Codice Abbiamo già visto come un dato host possa trasmettere un oggetto (serializzabile) ad un altro host. Quest ultimo potrà eseguire l oggetto pur non possedendo il bytecode della classe

Dettagli

Con il pulsante Start si introducono palline che rimbalzano in un area di disegno fino a che non è terminato il loro ciclo di vita (1000 movimenti).

Con il pulsante Start si introducono palline che rimbalzano in un area di disegno fino a che non è terminato il loro ciclo di vita (1000 movimenti). Rimbalzi. import java.awt.*; import java.awt.event.*; import java.applet.applet; public class Bounce extends Applet implements ActionListener { private Canvas canvas; private Button b1; private Button

Dettagli

Laboratorio di reti II: Java Server Pages

Laboratorio di reti II: Java Server Pages Laboratorio di reti II: Java Server Pages Stefano Brocchi brocchi@dsi.unifi.it 6 aprile, 2009 Stefano Brocchi Laboratorio di reti II: Java Server Pages 6 aprile, 2009 1 / 34 JSP - Java Server Pages Le

Dettagli

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

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server Versione 30.5.05 Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/: applicazioni 1 La logica dei socket Abbiamo visto che un applicazione client si connette

Dettagli

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012 + Sviluppo Applicazioni Mobile Lezione 11 + Credits I lucidi di questa lezione sono stati preparati da: Professor Stefano Mizzaro Professor Paolo Coppola e sono stati modificati e completati dal Dr. Paolo

Dettagli

Non si deve fare ALCUN riferimento alla parte specifica di JDBC.

Non si deve fare ALCUN riferimento alla parte specifica di JDBC. Un applicazione per la quale sia fondamentale l indipendenza dal Database può essere scritta in Java usando le specifiche. (Package java.sql) Non devono essere usate chiamate specifiche del database: Si

Dettagli

APPENDICE. Appendice. Strumenti per lo sviluppo dei programmi Java

APPENDICE. Appendice. Strumenti per lo sviluppo dei programmi Java APPENDICE Appendice Strumenti per lo sviluppo dei programmi Java Per imparare a programmare non è sufficiente leggere gli esempi del testo, ma è necessario scrivere ed eseguire realmente i programmi. Tutti

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java 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)

Dettagli

SOMMARIO INTRODUZIONE...XV CAPITOLO 1: PRESENTAZIONE...1 CAPITOLO 2: FONDAMENTI DI JAVA...39

SOMMARIO INTRODUZIONE...XV CAPITOLO 1: PRESENTAZIONE...1 CAPITOLO 2: FONDAMENTI DI JAVA...39 sommario 24-06-2004 10:18 Pagina V SOMMARIO INTRODUZIONE.......................................XV CAPITOLO 1: PRESENTAZIONE.......................................1 1.1 Introduzione...2 1.2 L organizzazione

Dettagli

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Ottava Esercitazione. introduzione ai thread java mutua esclusione Ottava Esercitazione introduzione ai thread java mutua esclusione Agenda Esempio 1 Concorrenza in Java: creazione ed attivazione di thread concorrenti. Esercizio 2 da svolgere Concorrenza in Java: sincronizzazione

Dettagli

appunti delle lezioni Architetture client/server: applicazioni server

appunti delle lezioni Architetture client/server: applicazioni server Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture /: applicazioni 1 La logica dei Abbiamo visto che un applicazione si connette e comunica con un applicazione mediante

Dettagli

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP (VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP D (FKR&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: il server attende una connessione da parte del client (su MDYDQHW6HUYHU6RFNHW), usa la

Dettagli

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Programmazione Object Oriented in Java

Dettagli

Connessione ad internet

Connessione ad internet Introduzione al C++ Connessione ad internet Istruzioni per la connessione internet: - una volta connessi, aprire un browser (firefox) - in Modifica/preferenze/avanzate/rete/impostazioni - attivare la modalità

Dettagli

MagiCum S.r.l. Progetto Inno-School

MagiCum S.r.l. Progetto Inno-School MagiCum S.r.l. Progetto Inno-School Area Sviluppo Web Autore: Alessio Bernardo Revisione: 1 Data: 23/05/13 Titolo: Sviluppo piattaforma e-learning e sviluppo siti web File: Documentazione tecnica Sito:

Dettagli

Programmazione concorrente in Java

Programmazione concorrente in Java Programmazione concorrente in Java Multithreading in Java Ogni thread e un oggetto, creato come istanza della classe java.lang.thread La classe Thread contiene tutti i metodi per gestire i threads L utente

Dettagli

INDICE. Indice. Introduzione

INDICE. Indice. Introduzione 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

Dettagli