Newsgroup: it.comp.java
Titolo: Swing, JFrame e JPanel con Threads

Salve a tutti.
Premetto che è la prima volta che ho a che fare con Thread e con
GUI... Il problema è:
1) alla partenza creo una JFrame "w1", ci aggiunge un pannello "pan1"
con su un bottone e una txtbox , e rende visibile la finestra
2) "w1" alla pressione del bottone crea il Thread "t1" e lo fa
partire, quindi si "nasconde" (w1.setVisible(false)), crea un secondo
JFrame "w2", vi aggiunge un pannello "pan2" e rende visibile il tutto.
3) Il Thread "t1" riceve un messaggio tale per cui deve aggiornare una
JList presente su "pan2" che si trova alle dipendenze del JFrame "w2".
Come faccio ad aggiungere, dal Thread "t1" delle stringhe al pannello
"pan1" che sta dentro a w2 e quindi fare un refresh della GUI?
Ho forse sbagliato approccio? In ogni caso, visto che rifare tutto
sarebbe da suicidio, c'è un modo per fare quello che mi serve così
com'è ora? Al momento io non faccio altro che distruggere e ricreare
il tutto in modo aggiornato... (bleah bleah bleaaaah! Funziona ma fa
troppo schifo! :) )
Grazie mille.
Ale

 "pan1" che sta dentro a w2 e quindi fare un refresh della GUI?
Al pannello "pan2".
Direi che su "w1", dove mantieni - immagino - un riferimento a "t1" catturi
l'evento di "t1" che ti serve (o viceversa, "t1" mantiene un riferimento a
"w1", ma č meglio la prima) e quindi vai a interagire come ti serve con "w2"
(che, siccome č istanziata da "w1", immagino abbia anch'essa su questo un
riferimento).

 riferimento).
Confermo che sia w1 che w2 hanno dei riferimenti al thread t1. Il
problema è: come catturo un evento che accade in t1?
Supponiamo che in t1 si sia verificato un evento. Con che comando
"avviso" w2 che c'è un evento per lei? E in che modo passo i parametri
da t1 a w2? E soprattutto, come faccio il tutto senza bloccare
l'esecuzione nè del thread nè della GUI?
Grazie mille!

 l'esecuzione nč del thread nč della GUI?
Ah, allora č una questione un po' lunga, si tratta di ripassare un po' la
gestione dei threads.. ;)
Il metodo piů spiccio č passare nel thread un riferimento alla GUI (w1 o w2)
ma č meglio se usi bene i threads con wait, notify e compagnia (trovi molto
facilmente tutta la documentazione specifica); per il "passaggio dei
parametri" attenzione a gestire tutta la roba grafica da w1 e w2, non da t1:
in ogni caso quando dalla GUI hai la notifica dell'evento del thread sei a
posto; come ultima cosa vai a vedere anche SwingUtilities.invokeLater().

 posto; come ultima cosa vai a vedere anche SwingUtilities.invokeLater().
Mi manca un bel tutorial fatto bene con un bel esempio su
invokeLater... Sto girando come un babbeo da un'ora per cercare di
capire bene come funziona ma non trovo nulla di fatto bene. E sul sito
della sun c'è un esempio "flipper" che usa delle librerie non
standard! CHe nervoso!
Vabbè, mi metto a "giocare" con wait() e notify()... A dir il vero ci
sto provando da qualche minuto, ma senza troppi successi: w2 non si
sveglia! Le piace dormire alla birbantona! :)
Ciao e grazie di nuovo!

 Ciao e grazie di nuovo!
Ciao e buona fortuna (io a quest'ora vado a nanna)  ;)


Anch'io di solito... :)
Ma la data di consegna del progetto universitario incombe
minacciosa! :)

 wrote:

Anch'io di solito... :)
Sarà per questo che i processi non si svegliano? :D
Purtroppo io non posso ancora andare a nanna... La data di consegna
