Pergunta

Estou chamando invokeLater diretamente do botão em actionPerformed com este código:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
   SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            int temp = (jComboBox1.getSelectedIndex() + 1);
        heavyProccesingFunction();
        }
   });
} 

e isso ainda congela a GUI.Porque?Obtenho o mesmo resultado sem usar a função invokelater.

devo usar

Thread queryThread = new Thread() {
      public void run() { 

em vez disso?

Editar:

Obrigado, um novo tópico deve ser usado.

Foi útil?

Solução

invokeLater ainda acaba executando o código no thread do despachante - logo mais tarde.O objetivo de invokeLater é permitir que threads de background postem trabalho no thread do dispatcher de eventos.

Parece que você realmente deve criar outro thread - ou usar um pool de threads para o mesmo tipo de efeito, ou SwingWorker por exemplo.Faça o que fizer, você precisa evitar executar seu método lento no thread do dispatcher de eventos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top