Fasyrio ha scritto:
il primo gestisce una label con un testo lampeggiante "Backup in corso"
Il punto è che l'accesso alla interfaccia utente (salvo POCHI casi documentati) va fatto SOLO nel contesto del Event Dispatch Thread.
Mentre qui si vede che nel run() vai a fare setVisible, setBackground ecc... Questo è INAPPROPRIATO.
Se vuoi far "lampeggiare" una label (quindi una cosa abbastanza "tranquilla" come tempistiche) sarebbe meglio usare un javax.swing.Timer, i cui eventi sono dispacciati ad un ActionListener nel EDT (quindi non ci sono problemi).
Fasyrio ha scritto:
mentre l'altro Thread gestisce il backup di un file.
//avvio maschera BackupInCorso creando un nuovo thread "wait"
ThreadProgresso tp = new ThreadProgresso(labelBackup);
Thread wait = new Thread(tp);
wait.start();
wait.setPriority(Thread.MAX_PRIORITY);
//avvio backup creando nuovo thread "backup"
String percorsoBackup = txtDestination.getText();
ThreadBackup tb = new ThreadBackup(percorsoBackup);
Thread backup = new Thread(tb);
backup.start();
backup.join();
//Quando finisci backup mostrami messaggio di avviso
JOptionPane.showMessageDialog(frmArcdestination, "Backup concluso con successo"");
Giusto per capire io ... quest'ultimo pezzo di codice lo fai a seguito di un qualche
evento, es. in un actionPerformed() ?
Perché se sì, sei nel EDT, che NON va mai tenuto bloccato. E invece ..... quel backup.join(); TIENE bloccato il EDT.
Quindi il ThreadBackup "gira" e fa quello che deve fare. Il ThreadProgresso pure STA girando ma il EDT è bloccato nel join(), quindi comunque non vedi alcun aggiornamento.