Como implementar tarefa ociosa no Java Swing
Eu tenho um aplicativo GUI que está ficando muito lento. Eu quero começar a introduzir o tempo para várias tarefas GUI - no entanto, muitas das nossas ações GUI acionam outras ações que, em seguida, "invocar mais tarde" para acionar outras ações.
Eventualmente, tudo se acalma e não há mais nada a fazer. Neste momento, quero parar um cronômetro e informar quanto tempo essa "ação" da GUI demorou.
Eu percebi que a maneira de fazer isso é implementar um método chamadoinvokeOnceIdle(Runnable task)
. O método executará a tarefa fornecida somente quando o AWTEventQueue estiver "vazio". ou seja, a "tarefa" fornecida deve ser a última coisa na fila.
Uma maneira de fazer isso seria se houver uma maneira de especificar uma prioridade "mais baixa" paraSwingUtilities.invokeLater
- mas isso não é possível.
Em seguida, olhei para ver se eu poderia "invokeLater" um Runnable que verifica se a fila de eventos está "vazia" - mas não há nenhuma maneira pública de ver se a fila de eventos está realmente vazia.
Qual é a melhor forma de fazer isso?