Invocador de swing más tarde congelar
-
29-10-2019 - |
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.
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.