SwingUtilities.isEventDispatchThread

0 respostas
renatosilva

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?

Criado 22 de outubro de 2008
Respostas 0
Participantes 1