Antes esse método era assim:
private void waitCursor() { // Estranhamente o cursor não muda se o JFrame estiver desabilitado
frame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
}
Como este método está numa classe chamada dentro de um manipulador de eventos, isto quer dizer que o código irá rodar dentro da EDT. Porém, para resolver um outro problema, eu tive que mudar o manipulador para tratar o evento em outra thread, assim, este código passa a rodar fora da EDT, portanto eu teria que usar invokeLater pelo o que eu entendi.
Não sei muito bem o motivo de ter que chamar o invokeLater para mexer na GUI fora da EDT, porque tem um textArea.append na mesma thread separada da EDT que funciona sem estar dentro de um invokeLater. Mesmo assim, tive a idéia de fazer o seguinte:
private void waitCursor() { // Estranhamente o cursor não muda se o JFrame estiver desabilitado
Runnable command = new Runnable(){
public void run() {
frame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
}
};
if (!SwingUtilities.isEventDispatchThread())
SwingUtilities.invokeLater(command);
else
command.run();
}
O que acham disso?