Jeśli nie możesz użyć SwingWorker
następnie użyj SwingUtilities.invokeLater
, np.:
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);
}
});
}
Uwaga:Kiedy to robisz, wszystko używane w run
musi być ostateczna lub muszą istnieć inne środki dostępu do zmiennych. Ten kod jest pod tym względem symboliczny.
Musisz wykonywać operacje na komponentach Swing poza wątkiem wywołującym zdarzenia, nie ma możliwości obejścia tego.