No purtroppo. Lo ripeto: l'accesso alla interfaccia utente va fatto "passare" nel EDT (invokeLater/invokeAndWait), non basta un synchronized. Salvo casi, ben documentati e noti, in cui certi metodi della GUI sono "thread-safe". Ma sono davvero pochi.
Inoltre sempre nei tuoi Runnable hai creato il JProgressBar. Idem è sbagliato, va fatto nel EDT.
E ancora, hai usato synchronized(this) che di per sé è tecnicamente corretto ma non è appropriato. Se vuoi che un thread A possa modificare uno "stato" di qualcosa in modo che poi un thread B possa leggerlo correttamente, devi sì usare la sincronizzazione (se non è già implicita es. in qualche struttura dati) ma sopratutto sia A che B devono usare lo stesso oggetto di lock.


Rispondi quotando
