cnesan ha scritto:
Ho notato e poi ho avuto conferme che: Quando si genera un evento e richiamo il metodo associato a quell'evento (pulsante), finchè il metodo richiamato è in funzione, il frame è frizzato nel senso che non posso aggiornare nessun controllo (sopratutto una JTextField che mi fa da status dell'elaborazione) ma anche pulsanti e altro sono frizzati.
Ho paura che non mi sia chiaro qualcosa.
Quando il framework invoca un metodo di un listener (actionPerformed, mouseClicked, keyPressed ecc...) lo fa nel contesto del
Event Dispatch Thread, che è il solo e unico thread adibito alla gestione della interfaccia Swing e nel cui contesto è lecito accedere ai componenti della interfaccia.
Quindi es. in un actionPerformed puoi tranquillamente fare tutti i getXyz, setXyz ecc... che vuoi sui componenti. Ma il risultato di qualunque modifica non lo vedi subito. Si vedrà solo dopo che il metodo del listener è terminato, dopo che il controllo è ritornato al framework, quando si accorgerà che ci sono aree da ridisegnare e andrà quindi a scatenare tutti i painting necessari sui componenti coinvolti.
Una cosa del tipo:
public void actionPerformed(ActionEvent e) {
label1.setText("ciao");
try {
Thread.sleep(2000);
} catch (InterruptedException ex) { ........ }
label1.setText("prova");
}
Semplicemente è
inappropriata.
Il testo "ciao" non lo vedrai mai sul JLabel! Vedrai solo "prova" e oltretutto la cosa peggiore è che in quei 2 secondi hai "congelato" completamente la interfaccia che in quel frangente non è più responsiva (e non è bello).
Se hai capito questo, hai capito il threading in Swing.