Newsgroup: it.comp.java
Titolo: Statusbar e thread

Ciao a tutti,
sto sviluppando una piccola applicazione desktop utilizzando SWING.
Ho creato una status bar formata semplicemente da un JPanel e da una JLabel.
Ho raccolto gli eventi dei componenti sotto un unico actionListener,
gestendoli tramite if. Ora, vorrei che prima dell'esecuzione dei metodi
relativi ad ogni componente, la status mi facesse apparire qualcosa del tipo
"LOADING...", facendolo sparire subito dopo la fine del metodo chiamato.
Ho creato un metodo per cambiare il testo della label e subito dopo lancia
un paintImmediately sulla label stessa.
Tutto funziona alla perfezione, solo che girovagando in rete ho letto
diverse opinioni che dicono che il metodo migliore consiste nell'utilizzare
i thread. Premesso che di thread so giusto le basi, non avendo mai avuto
occasione di lavorarci, mi piacerebbe adottare questa soluzione, l'unico
problema č che leggendo i vari tutorial ed esempi in internet, il risultato
č stata una gran confusione. Non so cosa deve implementare lģinterfaccia
Runnable, se il metodo o il cambio di testo nella label, non so se devo fare
una classe a parte e non so come lanciare il tutto...
Vi sarei molto grato se potreste darmi una mano...anche dandomi qualche link
in internet che abbia un esempio che fa a caso mio...
Grazie a tutti

 nell'utilizzare i thread. 
[CUT]
La gestione dei thread nelle interfacce grafiche è molto importante, sebbene
come da te notato non facile da affrontare.
La questione è lunga, tuttavia cercherò di darti la giusta base per partire
e sfruttare le informazioni che trovi in rete.
Il maggior guadagno che si ha nell'utilizzare i thread è un'interfaccia più
responsiva e veloce nella gestione degli eventi. Questo perchè ogni evento
gestito nei vari listener viene MESSO IN CODA ed eseguito solo
successivamente agli eventi che lo precedono, con la conseguenza che se in
un listener si inserisce un'elaborazione troppo lunga l'interfaccia grafica
non risponderà più, in questo lasso di tempo, ad alcun evento.
Per ovviare a ciò si utilizzano appunto i thread: si inserisce dunque
l'elaborazione in un thread e si lancia questi all'interno del listener che
potrà dunque terminare subito (l'elaborazione proseguirà per conto suo
all'interno del thread) liberando l'interfaccia!
E come fare se bisogna modificare l'interfaccia PRIMA e DOPO l'elaborazione?
Semplice: basta inserire l'istruzione di modifica iniziale (ad esempio
LOADING...) all'interno del listener PRIMA di chiamare il thread, e quella
finale (ad esempio COMPLETED) all'interno del thread al termine delle
istruzioni di elaborazione, con l'accortezza di eseguire queste istruzioni
che modificano la GUI, e che NON sono dentro un listener, utilizzando il
metodo SwingUtilities.invokeLater(Runnable doRun), poichè OGNI MODIFICA
ALLA GUI DOVREBBE ESSERE ESEGUITA IN CODA ALLE ALTRE, soprattutto se
concorrente.
In alternativa è possibile anche utilizzare la classe SwingWorker.
Non pretendo di essere stato chiaro nè esauriente (tutt'altro), l'argomento
è da affrontare con calma e purtroppo non ho molto tempo per farti i molti
esempi che ci vorrebbero, tuttavia spero di averti dato alcuni concetti di
base e soprattutto degli spunti di partenza. Una buona fonte per
approfondire tutto ciò è il Java Tutorial, dai un'occhiata qui:
http://java.sun.com/docs/books/tutorial/essential/threads/index.html
e qui:
http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html
Troverai informazioni anche sul metodo invokeLater citato prima (è molto
importante, comprendi bene a cosa serve e perchè) e la classe SwingWorker.
In bocca al lupo,
Sergio B.
-- 
Sergio Bossa
Author and Developer of:
- Montag, Web Services System for XML Database Interaction:
 
http://montag.sourceforge.net
- QuickNote:
 
http://quicknote.sourceforge.net

 come da te notato non facile da affrontare.
[CUT]
Magari tutti i tutorial e gli esempi che ho trovato in rete siano chiari
come la tua spiegazione. Anche se non esauriente, come dici tu, per ora è
più che sufficiente per introdurmi nel fantastico mondo della programmazione
con i thread. Credo che riuscirò a guardare alle guide con un po' più di
luce ora.
Grazie mille, e se avessi qualche altro consiglio da dispensare, ben venga!

 venga!
Beh, tu mettiti al lavoro e se hai qualche dubbio chiedi senza problemi, sia
a me che al NG in generale.
Sperando ovviamente di poterti aiutare...
Un saluto,


 > come la tua spiegazione.
-_-
Che capra...intendevo dire "fossero" chiari...è che non rileggo mai quello
che scrivo e al momento mi vengono in mente 5 o 6 frasi che potrei
intercambiare...