Java Swing - rodando em EDT
Eu tenho um par de perguntas sobre Swing e usando EDT para atualizações GUI. Eu comecei a ler sobre essas coisas, então sou um iniciante nessa área:
Quais operações são necessárias para executar no EDT? Se não, é simplesmente uma exceção levantada?Há algum momento específico em que realmente estamos no EDT automaticamente?se agendarmos uma tarefa usandoSingUtilities.invokeLater
nós enfileiramos isto para a fila atual de tarefas de atualização de GUI certo?Acessos para a fila acima eu acho que são sincronizados, ou alguma coleção simultânea é usada, mas se eu agendar duas tarefas de atualização da GUI, a partir de dois segmentos de fundo, é impossível dizer qual deles será adicionado primeiro? Por exemplo, se o Thread 1 FIRST enviar uma tarefa de configurar o texto de um JLable para "yes" e, em seguida, pouco tempo depois, o segundo thread aparecer e enviar a tarefa de configurar esse valor para "no", garantimos que o resultado será "sim", ou é simplesmente uma questão de como essas coisas são agendadas pelo sistema operacional?Como exatamente o SwingWorker garante quedone()
método é executado em EDT? Define o seguinte código:
future = new FutureTask<T>(callable) {
@Override
protected void done() {
doneEDT();
setState(StateValue.DONE);
}
};
então eu queria saber se FutureTask de alguma forma garante queinvokeLater
é chamado?
Obrigado por todas as suas respostas.