Ако не можете да използвате SwingWorker
след това използвайте SwingUtilities.invokeLater
, напр.:
if (progress != Path.operationProgress) {
final int progressCopy = progress; // Probably not final so copy is needed
SwingUtilities.invokeLater(new Runnable() {
@Override
void run() {
operationsProgressBar.setValue(progressCopy);
}
});
}
Забележка:Когато правите това, всичко, използвано в run
трябва да е окончателен или трябва да има други мерки за достъп до променливите. Този код е символичен в това отношение.
Трябва да извършвате операции върху компоненти на Swing извън нишката за изпращане на събития, няма начин да заобиколите това.