У меня есть JProgressBar progressBar
, который должен обновляться в цикле for(). На самом деле я уже рассмотрел этот вопрос: Progress bar not updating during a loop, и я попробовал его с новым потоком, но я не знаю, почему он до сих пор не обновляется.Почему мой ProgressBar не обновляется в цикле for()?
Что я пробовал:
public void getNewUUID(BufferedWriter output) {
Menu.progressBar.setMinimum(0);
Menu.progressBar.setMaximum(100);
String hashchar = "";
x = ID_LENGTH/100;
y=0;
for(int ch = 0; ch != ID_LENGTH; ch++) {
done = ch;
hashchar = "";
for(int id = 0; id < ID_LENGTH; id++) {
hashchar = hashchar+ALPHA_CHARS[rnd.nextInt(ALPHA_CHARS.length)];
try {
output.write(hashchar);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
hashchar = "";
new Thread(new Runnable() {
public void run() {
if(done>=x) {
x=x+x;
y++;
Menu.progressBar.setValue(y);
}
}
}).start();
}
}
try {
output.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Возможно, потому, что вы не используете поток отправки событий для обновлений графического интерфейса пользователя. Я бы рекомендовал вам изучить SwingWorkers при выполнении длительных задач, требующих обновления графического интерфейса пользователя. – aioobe
При работе с качелями используйте [SwingUtilities] (http://docs.oracle.com/javase/7/docs/api/javax/swing/SwingUtilities.html), не просто продолжайте создавать новые потоки. – Codebender
Не могли бы вы привести мне пример? – Freakey