Pelo que eu entendi, todos os Event Listeners e métodos que atualizam a GUI são chamados na Event Dispatch Thread. Então porque o código 1 não funciona, mas o código 2 funciona?
Nesse código a JProgressBar não atualiza.
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0 ; i < 99999999 ; i++)
progressbar.setValue(i);
}
}
Nesse código a JProgressBar atualiza.
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SwingWorker<Void,Void> worker = new SwingWorker<Void, Void> {
protected Void doInBackground() {
for (int i = 0 ; i < 99999999 ; i++)
progressbar.setValue(i);
return null;
}
}
worker.execute();
}
}
Mas se o primeiro está na EDT, então qual é o problema?
Também não entendi muito bem quando é necessário usar InvokeLater, se eu já fazia GUIs antes de saber que essa função existia e elas apareciam normalmente.