Pregunta

Estoy llamando a invokeLater directamente desde el botón en la acción Realizado con este código:

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

y eso todavía congela la GUI.¿Por qué?Obtengo el mismo resultado sin usar la función invokelater.

¿Debería usar

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

en su lugar?

Editar:

Gracias, debería usarse un hilo nuevo.

¿Fue útil?

Solución

invokeLater todavía termina ejecutando el código en el hilo del despachador, justo más tarde.El objetivo de invokeLater es permitir que los subprocesos en segundo plano publiquen trabajo en el subproceso del despachador de eventos.

Parece que debería crear otro hilo, o usar un grupo de hilos para el mismo tipo de efecto, o SwingWorker por ejemplo.Hagas lo que hagas, debes evitar ejecutar tu método lento en el hilo del despachador de eventos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top